网站首页 » 转载 » 小程序微信支付

小程序微信支付

December 31, 2020 转载

### 微信支付
#### 一、微信小程序原生支付能力有两种:

1. 普通模式,微信小程序-申请绑定商户号收款
2. 服务商模式,见明思意为其他商户号提供支付服务,服务商帐号下可挂多个子商户号,子商户号借助服务商 的支付能力完成支付,并最终将资金打到子商户账号上

**服务商模式和普通模式区别**

服务商代理开发提供支付功能,子商户没有开发支付功能的权限但是可以借助服务商支付能力完成支付。

**服务商模式下又分普通服务商和银行服务商两大类**
1. 普通服务商:
没有资金清算能力,买家通过自商户号支付钱直接转给自商户号;
2. 银行服务商:
有清算能力,买家通过子商户号支付钱留在银行服务商,再由银行服务商给子商户号结算。

**微信原生支付流程**
> 需要处理异步通知,服务商模式由服务商处理

**步骤如下**:

1. 用户登陆(获取openid)
2. 调用统一下单接口生成预支付订单(异步通知url)
3. 通过预的订单信息拉取小程序支付弹窗
4. 支付完成获取支付结果

**流程图**

[相关官方API](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_10&index=1)

### 二、涉及支付场景

1. 小程序直接唤起微信支付
2. APP拉起小程序再进行微信支付
3. H5拉起小程序支付

#### 小程序直接唤起微信支付
**准备工作:**

**1. 获取openid**
- 北汽小程序实现思路:

> 1. 前端调用微信小程序login方法获取code传给后端接口,后端接口调用微信服务端api(jscode2session)解析出openid,调用jscode2session需要提供appid,appsecret。【 注: openid属于用户敏感信息,不建议在小程序中进行缓存。】
> 2. 前端调用微信小程序login方法登陆成功以后调用getUserInfo方法,把iv,encryptedData传递给后端接口,后端接口调用微信服务端jscode2session获取sessionKey然后解密获取openid
两者区别第一种只能获取openid,第二种可以获取用户昵称,头像,邮箱等一系列用户信息。

**2. 获取微信支付参数**

通过订单调用移动支付单生成接口获取移动支付单号(erporderId,openid)-->拿着移动支付单号&appid生成预支付订单-->前端通过预支付订单信息调用requestPayment方法拉起小程序支付弹窗-->支付完成获取支付结果。
这里需要注意由于支付唤起方式多样,最好将微信支付能力封装成独立SDK,以便于各业务线调用,并根据业务线作出区分来支持跳转支持,根据不同的业务线【原生跳转,重定向跳转】,来处理不同的跳转业务逻辑。

#### APP拉起小程序再进行微信支付
**准备工作**

**1. 获取小程序原始ID,提供给APP研发**
>(微信公众号后台获取)https://mp.weixin.qq.com/ 小程序-设置-基本设置-账号信息-原始ID

**2. 把小程序支付地址路径提供给APP**
> /src/packages/pay/payApp/index?params=来源、支付信息等【requestPayment支付参数】。

> 示例: /src/packages/pay/payApp/index?from=ios&payinfo=xxx

支付环节调用requestPayment方法拉起小程序支付弹框返回APP时,需要配置返回时带参,比如订单支付成功、失败等信息。可不依赖此返回信息、最终订单结算信息需自行查询【与APP端协商】

> 示例: `<o-button type="function-grey" open-type="launchApp" app-parameter="status={{status}}" binderror="launchAppError">返回 APP</o-button>`

相关移动端配置文档:[APP拉起小程序](https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Launching_a_Mini_Program/Launching_a_Mini_Program.html)

#### H5拉起小程序支付

前提需要最新版的微信版本支持:[具体文档](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html)
若版本不支持,需要嵌入web-view
流程:
在h5中选择支付后-->跳转到小程序,使用小程序接口生成支付订单信息-->支付成功后-->再返回h5
h5通过wx.miniProgram.navigateTo携带一个prepayid到支付页
在支付页通过prepayid拿到支付相关信息唤起支付。后面流程同微信原生支付流程。