支付宝App支付后端怎么做alipay_sdk_cj客户端请求串生成完整教程【免费下载链接】alipay_sdk_cjAliPay Sdk for 仓颉 支付宝接口后端sdk方便cangjie开发者快速接入支付宝的支付接口目前只支持最广泛使用的商户直接接入模式只支持最安全的RSA2公钥证书方式签名验证方式,默认只支持utf-8编码和JSON格式项目地址: https://gitcode.com/Cangjie-SIG/alipay_sdk_cj做支付宝 App 支付时后端最核心的一步就是生成客户端请求串商户服务器用私钥对订单参数签名把签名后的整串数据下发给 App 端App 再把它传给支付宝 SDK 唤起收银台。开源项目 alipay_sdk_cj 是支付宝接口的仓颉Cangjie后端 SDK支持 RSA2 公钥证书验签方式覆盖 App 支付、网页支付、退款、关单等 12 个常用接口默认 utf-8 编码和 JSON 格式让仓颉开发者几行代码就能接入支付宝支付接口。为什么 App 支付后端只需要生成字符串很多新手会疑惑为什么后端不直接调用支付宝网关这是支付宝 App 支付的官方机制决定的环节谁来干干什么1. 下单签名商户后端用应用私钥对订单参数排序签名生成客户端请求串2. 唤起收银台App 客户端把请求串交给支付宝 SDK唤起支付宝收银台3. 异步通知支付宝 → 商户后端支付完成后支付宝回调 notify_url后端验签并改单alipay_sdk_cj 把第 1 步封装成了tradeAppPay接口直接返回签名后的请求串字符串签名、参数排序、编码这些魔鬼细节全部由 src/request.cj 和 src/sign.cj 内部完成。⚠️ 该 SDK 只支持商户直接接入模式和 RSA2SHA256WithRSA公钥证书验签方式这也是官方目前推荐的接入方式。接入前准备配置依赖与密钥第一步在你的项目 cjpm.toml 中添加依赖如果你的项目使用仓颉 LTS 1.0.0 版本在 cjpm.toml 中添加[dependencies] alipay_sdk {git https://gitcode.com/Cangjie-SIG/alipay_sdk_cj.git, branch main}如果是 Beta Channel 0.53.13 版本分支名换成beta_0.53.13。 注意1.0.0 版本需要单独下载 stdx 扩展包并配置环境变量CANGJIE_STDX_HOME指向 stdx 存放路径Linux/macOS 写在~/.bash_profile或~/.zshrc里。第二步准备 6 个密钥配置项在支付宝开放平台选择公钥证书方式生成 RSA2 密钥密钥格式要求 PKCS1拿到下面这些值配置项说明appID支付宝分配的应用 IDprivateKey应用私钥单行文本publicKey应用公钥单行文本appCertSn应用公钥证书序列号 SNalipayRootCertSn支付宝根证书 SNalipayPublicKey证书解析出的支付宝公钥开发调试建议先用沙箱环境网关地址https://openapi-sandbox.dl.alipaydev.com/gateway.do上线时再切换正式证书配置。快速上手构建支付宝客户端用PayClientBuilder链式构建一个客户端源码定义在 src/pay.cjimport alipay_sdk.{PayClientBuilder, Payer} import alipay_sdk.biz func newPayClient(): Payer { var client PayClientBuilder() .setAppID(appid) // 应用ID .setApiUrl(apiurl) // 网关地址 .setAlipayRootCertSn(alipayrootcertsn) // 支付宝根证书SN .setAlipayPublicKey(alipaypubKey) // 支付宝公钥 .setAppCertSn(appcertsn) // 应用公钥证书SN .setPrivateKey(privateKey) // 应用私钥 .setPublicKey(pubkey) // 应用公钥 .setCharset(utf-8) .setFormat(JSON) .setSignType(RSA2) .setVersion(1.0) .setNotifyUrl(https://你的域名/callback) // 异步回调地址 .build() return client }build()方法会校验所有必填项缺任何一项都会抛出明确的异常如api_url is required帮你快速定位配置问题。核心步骤生成 App 支付客户端请求串1. 组装订单业务参数App 支付对应的业务参数类是TradeAppPayBiz定义在 src/biz/trade_app_pay.cj必选字段就 3 个字段方法说明out_trade_nosetOutTradeNo商户订单号唯一total_amountsetTotalAmount订单总金额元subjectsetSubject订单标题其余字段如body订单描述、timeout_express超时时间可以通过通用的set(key, value)方法追加业务参数基类见 src/biz/biz_content.cj。2. 一行代码生成请求串main() { var bizContent biz.TradeAppPayBiz() bizContent.setOutTradeNo(JsonString(2024102817470400001)) bizContent.setTotalAmount(JsonString(88.88)) bizContent.setSubject(JsonString(仓颉App测试订单)) let client newPayClient() // 返回的就是可以直接下发给App端的客户端请求串 let orderStr client.tradeAppPay(bizContent) println(orderStr) return }tradeAppPay的完整实现在 src/pay.cj它内部走的是createClienSdktRequest分支组装公共参数 → 字典序排序 → 用私钥 RSA2 签名 → 输出application/x-www-form-urlencoded格式的整串数据。注意这条路径不会发起 HTTP 请求因为 App 支付场景下签名串是给客户端用的不经过服务端网关。生成的请求串长这样示意app_id2021000...biz_content{out_trade_no:...,total_amount:88.88,subject:...}charsetutf-8methodalipay.trade.app.paynotify_url...signMEQCI...sign_typeRSA2timestamp2024-10-28 17:47:04version1.0把它通过你自己的接口如 JSON 响应下发给 App 端即可App 端把它传给支付宝 SDK 就能唤起收银台。别忘了后半程异步回调验签支付完成后支付宝会以 POST 方式把结果推送到你配置的notify_url。用asyncVerifySign方法验签确认消息确实来自支付宝服务器// 在HTTP回调处理器中 let isPass newPayClient().asyncVerifySign(body) if (isPass) { // 验签通过更新订单状态必须返回字符串 success ctx.responseBuilder.status(200).body(success) } else { ctx.responseBuilder.status(200).body(fail) }两个容易踩的坑✅ 验签通过必须返回字符串success否则支付宝会重复多次重试推送✅ 验签失败统一返回fail。关键源码导读文件职责src/pay.cj客户端主体PayClient、PayClientBuilder与全部 12 个接口入口src/request.cj公共参数组装、字典排序、encodePayload签名编码src/sign.cjRSA2 签名/验签SHA256WithRSA Base64支持 PKCS1 密钥格式src/util.cj北京时区时间戳、回调消息待签名字符串解析等工具函数src/biz/trade_app_pay.cjApp 支付业务参数类example/src/main.cj完整可运行示例沙箱环境SDK 测试用例基于沙箱公钥证书位于 src/test/pay_test.cj跟着示例代码就能跑通全流程。常见问题 FAQQ1tradeAppPay和tradeCreate有什么区别tradeCreate是服务端直接调网关创建预订单返回 trade_notradeAppPay是 App 支付模式后端只生成签名请求串由 App 端唤起支付宝完成下单和支付。Q2支持退款吗支持。SDK 提供tradeRefund退款、tradePageRefund退款页面、tradeFastpayRefundQuery退款查询、tradeCancel撤销、tradeClose关单等接口退款类响应结构定义在 src/response/ 目录下。Q3密钥格式不对会怎样注意密钥必须是PKCS1格式非 Java 适用生成方式参考支付宝开放平台的公钥证书文档。SDK 内部会自动为单行密钥补上 PEM 头尾并换行格式化见 src/sign.cj 中的formatKey。Q4以后想加网页支付怎么办tradePagePay电脑网站和tradeWapPay手机网站已经支持它们返回的是自动提交的 HTML form 页面直接渲染给浏览器即可实现同样在 src/pay.cj。总结用 alipay_sdk_cj 做支付宝 App 支付后端流程可以概括为四步配依赖cjpm.toml 引入alipay_sdk建客户端PayClientBuilder填入 AppID 和 RSA2 证书密钥生成请求串TradeAppPayBiz填 3 个必选字段调tradeAppPay拿到签名串下发给 App接收回调asyncVerifySign验签成功返回success。整条链路只涉及 RSA2 签名和参数组装没有多余的 HTTP 细节要处理对仓颉新手非常友好 【免费下载链接】alipay_sdk_cjAliPay Sdk for 仓颉 支付宝接口后端sdk方便cangjie开发者快速接入支付宝的支付接口目前只支持最广泛使用的商户直接接入模式只支持最安全的RSA2公钥证书方式签名验证方式,默认只支持utf-8编码和JSON格式项目地址: https://gitcode.com/Cangjie-SIG/alipay_sdk_cj创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
