个人案例
- 云开发“分账功能”踩坑记
云开发的分账功能还在公测中,需要去申请开通。如果等了几天还没开通,可以在社区提问,会有官方人员来跟进。 我等了 5 天才开通。 开始之前,首先要搞清楚一个概念:云开发就是一个服务商,所以开发者不需要注册成为支付服务商,就可以使用服务商分账。 以下是我开发过程中遇到的一些坑。可能你会遇到其他坑,记得把调用接口的结果打印出来,看看报的是什么错。 1、文档不全,需要传 profit_sharing 或者 profitSharing 云开发统一下单接口的文档缺少 profit_sharing 参数,需要结合原支付接口文档来看,在分账对接步骤里也有说明。 如果没传这个参数,会报错:“非分账订单不支持分账”。 经过测试发现,这个参数是必需的,可以是 profit_sharing,也可以是 profitSharing,两者都兼容。由于其他参数都是驼峰写法,所以我用了 profitSharing . 2、不需要每次分账都“添加分账接收方” 添加分账接收方,只需要调一次接口即可,添加成功后,不需要每次分账都添加接收方。 有个小提醒,receiver 这个参数不是 JSON,而是JSON 序列化后的字符串,记得用 JSON.stringify 处理。序列化前是对象,不是数组,如果有多个接收方就调用多次接口。 (注意区分一下,在分账接口中,分账接收方的参数是 receivers,不是 receiver。不管单次分账还是多次分账,receivers 参数都是序列化后的字符串,序列化前是对象数组,不是对象) 这里还有个 bug,根据通知指引,我并没有找到这个入口:“商户平台 - 交易中心 - 管理分账接收方”。后面发了个提问帖,找到了这个暗门。登录商户平台,然后访问这个地址:https://pay.weixin.qq.com/index.php/xphp/ccmn_sharing/split_relation_manage 这可能也不是 bug,我猜估计是担心商户会有意或者无意的删除分账接收方。 3、sub_appid 是必填 文档有误,这个参数是必填。 4、PERSONAL_OPENID 和 PERSONAL_SUB_OPENID receivers 的 type 参数,PERSONAL_OPENID 和 PERSONAL_SUB_OPENID,刚开始会有点迷糊。我填的是 PERSONAL_SUB_OPENID,account 填小程序数据库里的用户 openid . 5、支付成功后,需要延时 1 分钟处理 支付成功后如果立即处理分账会报错:“订单处理中,暂时无法分账,请稍后再试”。 分账产品介绍的文档是这么写:“在交易完成后,准实时(建议1分钟后)或30天内调分账接口。” 我单独用了一个云函数来处理分账,setTimeout 设置 59 秒后调用分账接口。 在开发者工具里,进入该云函数的配置设置,把超时时间设置为 60 秒,否则会返回超时。 支付成功后调用该云函数。 2021-9-23 更新: 不能用 setTimeout 处理分账,这样云函数会一直占用内存,超成资源浪费(而且是巨大的浪费)。应改成定时触发,例如每小时触发一次,把已支付的并且支付时间已经过了一分钟的订单找出来,调用分账接口。
2021-09-23 - 新能力|云调用支持微信支付啦!
导语 小程序·云开发的云调用能力,让用户可以免鉴权快速调用微信的开放能力,极大节约了开发成本。现在,云调用已支持微信支付,用户在云开发控制台可直接绑定微信支付商户,在绑定完成后可在云开发中原生接入微信支付。 使用云开发的云调用来实现相应的支付功能后,开发者无需关心证书、签名、微信支付服务器端文档,使用简单,代码较少,只需要调用相应的函数即可。此外,因为云调用基于微信私有协议实现,官方通过服务商提供支付接口对接支持,不依赖第三方模块,免去泄漏证书、支付情况等其他敏感信息的风险。此外,云开发的云调用还支持云函数作为微信支付进行支付和退款的回调地址,不再需要定时轮询,更加高效。 云调用支付支持接口 云调用支付现已支持如下接口 统一下单接口 查询订单 关闭订单 下载对账单 申请退款 查询退款 如何接入 准备工作 微信开发者工具 Nightly 版 1.02.2005111 及更新的版本 需要已经开通了微信支付,且已绑定了商户号的小程序。 如何开通 在微信开发者工具中,使用绑定的微信小程序账号,打开云开发控制台,在云开发控制台中的 设置 - 全局设置 中添加商户号 [图片] 添加后,需要在绑定的商户号管理员在微信支付提供的【服务商助手】小程序上确认授权。 如果需要 jsapi 和 api 退款权限,需要前往微信支付商户平台我的授权产品中进行确认授权,完成授权后即可调用微信支付相关接口能力。 支付 Demo 代码 在云函数中,调用 cloudPay.unifiedOrder ,即可生成小程序侧调用支付接口所需请求结果 [代码]cloud.cloudPay.unifiedOrder({ "body" : "小秋TIT店-超市", "outTradeNo" : "${Date.now().toString().slice(3)}", "spbillCreateIp" : "127.0.0.1", "subMchId" : "1900009231", "subAppid" : "wxe5f52902cf4de896", "totalFee" : 1, "envId": "test-f0b102", "functionName": "pay_cb" }) [代码] 关键开发流程 小程序调用云函数,在云函数中调用统一下单接口,参数中带上接收异步支付结果的云函数名和其所在云环境 ID 统一下单接口返回的成功结果对象中有 payment 字段,该字段即是小程序端发起支付的接口(wx.requestPayment)所需的所有信息 小程序端拿到云函数结果,调用 wx.requestPayemnt 发起支付 支付完成后,在统一下单接口中配置的云函数将收到支付结果通知 支付回调 微信支付云调用在调用时,需要传递 envId 和 functionName 这两个参数,这两个参数将会在微信支付成功后,发送相应的消息通知,来告知开发者用户的支付状态。 相关文档 云调用微信支付能力说明:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/wechatpay.html API 文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/open/pay/Cloud.CloudPay.html 视频教程 为了帮助你掌握云调用微信支付,这里为你准备了快速上手视频~快去试试吧~ https://www.bilibili.com/video/BV1Tz4y1d7CX 总结 云开发的微信支付云调用能力,可以让更多的开发者安全、快捷的实现支付,让企业的资金更加的安全。 小调研 云调用现在已经支持了微信支付,除了微信支付,你还有什么特别想要的功能么?不妨在下方评论区中留言告诉我们。
2020-09-14