feat(hjc): 支持公众号H5 JSAPI支付 + 微信网页授权/JS-SDK签名
- 新增 WechatJsapiStrategy(WECHAT):wechatpay-java JsapiServiceExtension.prepayWithRequestPayment
返回 wx.chooseWXPay 所需参数;带 openid 走 JSAPI,否则回退 Native 扫码
- PaymentServiceImpl.getPaymentStrategy:WECHAT 按 openid 有无分流 JSAPI/Native
- HjcOrderController.pay:读取 openid,改用 WECHAT 类型
- 新增 HjcWechatController:/authorize 生成公众号授权地址、/oauth/callback code换openid回跳、
/jsapi-sign 生成 wx.config 签名(jsapi_ticket,公众号配置存 redis cache{tenantId}:setting:wx-official)
- ADR 0003 记录 JSAPI 决策
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
# H5 端(公众号内)支付采用微信 JSAPI 直接唤起
|
||||
|
||||
汇吉采移动端 H5(`hjc-h5`,在微信「公众号」内打开)的支付采用**微信 JSAPI**(`PaymentType.WECHAT` + `openid`),由后端 `WechatJsapiStrategy` 用 `wechatpay-java` 的 `JsapiServiceExtension.prepayWithRequestPayment` 直接返回前端 `wx.chooseWXPay` 所需的 `appId/timeStamp/nonceStr/package/signType/paySign`;无 `openid`(非公众号环境)时**回退 Native 扫码**展示 `codeUrl`。
|
||||
|
||||
选择理由:公众号内直接「唤起支付」免去另开微信扫二维码的操作,转化率与体验均优于 Native 扫码;后端支付组件(`PaymentRequest.openId`、`PaymentResponse.wechatJsapi`、`PaymentChannel.WECHAT_JSAPI`、`WechatPayType.JSAPI`)早已为 JSAPI 预留,只差一个策略实现,改造成本低。
|
||||
|
||||
代价/偏离:
|
||||
- **需要用户 openid**,因此引入微信**网页授权**(静默 `snsapi_base`):`/hjc/wechat/authorize` 生成授权地址,`/hjc/wechat/oauth/callback` 用 `code` 换 `openid` 后回跳 H5 并附带 `openid`。
|
||||
- **需要 `wx.config` 签名**:新增 `/hjc/wechat/jsapi-sign`(基于 `jsapi_ticket` 做 SHA1 签名),公众号配置(appId/appSecret)存于 Redis `cache{tenantId}:setting:wx-official`。
|
||||
- **不改 Native 扫码逻辑**:两者共用同一商户号/回调地址;`PaymentServiceImpl.getPaymentStrategy` 在 `WECHAT` 类型下按 `openid` 有无分流 JSAPI/Native,未破坏既有 Native 调用方。
|
||||
|
||||
兼容与说明:本方案是「带 openid 走 JSAPI,否则 Native」的弹性分流,非公众号环境(如普通浏览器/开发联调)仍可扫码支付,便于无真实公众号配置时验证。
|
||||
Reference in New Issue
Block a user