# 云调用对接微信支付

使用云开发来实现相应的支付功能后，开发者无需关心证书、签名、微信支付服务器端文档，使用简单，代码较少，只需要调用相应的函数即可。此外，因为云开发基于微信私有协议实现，官方通过服务商提供支付接口对接支持，不依赖第三方模块，免去泄漏证书、支付情况等其他敏感信息的风险。同时，云开发还支持云函数接收微信支付进行支付和退款的回调，安全高效。

云开发场景下的微信支付调用方式支持 小程序/公众号 场景调用。

1. 安全：微信私有协议，无证书等信息泄露风险
2. 免签名：所有接口免签名 & 直接获取小程序 wx.requestPayment 所需参数
3. 接收回调：云函数支持接收异步支付结果回调

![](https://res8.wxqcloud.qq.com.cn/wxdoc/c0bc3654-2efb-4db9-b083-b3d84bf25a89.png)

## 资质

需要是已经开通了微信支付，且已绑定了商户号的小程序。参考[接入指引](https://pay.weixin.qq.com/static/applyment_guide/applyment_detail_miniapp.shtml)。

注意：根据[交易类小程序运营规范](/miniprogram/product/jiaoyilei/yunyingguifan.md#_1-5-%E8%B5%84%E9%87%91%E7%BB%93%E7%AE%97)，对于小程序内提供珠宝玉石、3C 数码、盲盒、服饰内衣、海淘、美妆、酒类、家用电器、玩具、箱包皮具、鞋靴、运动户外等商品在线销售及配送服务时，不可使用云调用支付能力，请使用 [工作流接入微信支付](workflow)。

### 开通

在云控制台 - 设置 - 全局设置中开通。

### 权限

添加商户号后需要分别进行账号绑定、JSAPI 和 API 退款权限授权。请注意：

1）账号绑定：商户号的**超级管理员**需要在微信支付提供的【微信支付商家助手】小程序上确认授权给 **1800008281 小程序云开发**这个服务商账号。

> 注意：管理员收到的模板打开可能是一个网页，如图所示。如果一开始加载的不是云开发服务商账号，需要手动下拉一下，选择「1800008281 小程序云开发」服务商账号
> ![](https://res8.wxqcloud.qq.com.cn/wxdoc/86c463ae-19ae-4de1-8139-7fe1bfca5da3.png)

2）JSAPI 和 API 退款权限，需要前往微信支付商户平台我的授权产品中进行确认授权。[说明](https://kf.qq.com/faq/170606Rnyq2u170606MJZNVB.html)

完成授权后即可调用微信支付相关接口能力。

![pay](https://res8.wxqcloud.qq.com.cn/wxdoc/843fbe60-62f5-422b-8d57-cd6e8ca2afd0.png)

### 接口

> wx-server-sdk >= 2.0.2

云开发提供了微信支付相关接口和服务端回调，包括统一下单、查询订单、关闭订单、申请退款、查询退款、下载对账单，具体文档见 [API 文档](/miniprogram/dev/wxcloudservice/wxcloud/reference-sdk-api/open/pay/Cloud.CloudPay)。

下单关键开发流程：

1. 小程序调用云函数，在云函数中调用[统一下单](/miniprogram/dev/wxcloudservice/wxcloud/reference-sdk-api/open/pay/CloudPay.unifiedOrder)接口，参数中带上接收异步支付结果的云函数名和其所在云环境 ID
1. 统一下单接口返回的成功结果对象中有 `payment` 字段，该字段即是小程序端发起支付的接口（`wx.requestPayment`）所需的所有信息
1. 小程序端拿到云函数结果，调用 `wx.requestPayment` 发起支付
1. 支付完成后，在统一下单接口中配置的云函数将收到支付结果通知

流程图可见顶部。

**注意**：收到支付结果回调的云函数必须返回一个 `{ "errcode": 0 }` 的对象，否则会认为回调处理失败，在接下来两天内会持续收到回调，直到返回成功为止。具体返回值协议见[统一下单](/miniprogram/dev/wxcloudservice/wxcloud/reference-sdk-api/open/pay/CloudPay.unifiedOrder)接口文档。

接口与微信支付原接口（[文档](https://pay.weixin.qq.com/doc/v2/merchant/4011935214)）的不同点在于：

- 私有安全链路，免证书管理，免签名计算
- 商户号填入 sub_mch_id 字段，小程序/公众号 AppID 填入 sub_appid 字段
- 免填写以下字段：mch_id、AppID、sign、sign_type
- 接口入参和返回值都为 JSON 而不是 XML
