微信支付

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

微信云托管提供了微信支付相关接口和服务端回调,包括统一下单、查询订单、关闭订单、申请退款、查询退款、下载对账单,具体文档见 API 文档

下单关键开发流程:
  1. 小程序调用云托管,在云托管中调用统一下单接口,参数中带上接收异步支付结果的服务名称和其所在云环境 ID
  2. 统一下单接口返回的成功结果对象中有 payment 字段,该字段即是小程序端发起支付的接口(wx.requestPayment)所需的所有信息
  3. 小程序端拿到后端结果,调用 wx.requestPayemnt 发起支付
  4. 支付完成后,在统一下单接口中配置的云托管服务将收到支付结果通知

注意:收到支付结果回调的云托管服务必须返回一个 { "errcode": 0 } 的对象,否则会认为回调处理失败,在接下来两天内会持续收到回调,直到返回成功为止。具体返回值协议见统一下单接口文档。

接口与微信支付原接口(文档)的不同点在于:
  1. 私有安全链路,免证书管理
  2. 商户号填入 sub_mch_id 字段,小程序/公众号 appid 填入 sub_appid 字段
  3. 免填写以下字段:mch_id、appid、sign、sign_type
  4. 接口入参和返回值都为 JSON 而不是 XML

资质

需要是已经开通了微信支付,且已绑定了商户号的小程序。参考接入指引

开通

前往「微信云托管控制台 - 设置 - 其他设置 - 微信支付配置」

接口调用方式

方式一 使用Agent

推荐使用方式一,部署中转服务,无需处理签名。详情参考开放接口服务

方式二 自行签名
  1. 获取 cloudbase_access_token。用户云托管环境中的 access_token 将会以只读权限挂载到用户容器中,挂载路径为:/.tencentcloudbase/wx/cloudbase_access_token 。微信推送新的access_token后容器中的access_token会同步更新。用户可以读取 access_token 并在请求时放到请求参数上,用户需要主动在 access_token 更新后替换,如定时轮询文件或 watch 文件变化,或每次读取文件。
  2. 计算 CloudBase 标准凭证。参考 Cloudbase Open API,将两个签名放置在 Header 中。
  3. 构建请求 URL。调用微信支付的 URL 格式如下:
http://{env}.internal.ap-shanghai.tcb-api.tencentcloudapi.com/api/v2/envs/{env}/wx/pay?cloudbase_access_token={cloudbase_access_token}
  1. 在容器内发起请求。