微信支付V3-商家转账到零钱
~
~
连续熬了几个晚上,终于在社区某高人的指点下完成了这块逻辑。由于V3的逻辑相对复杂,网上的资料也相对有限,在这块遇到很多坑
场景
最近答题活动增加了抽奖发红包的活动,抽奖其实在答题活动经常存在,但是之前都是通过线下领取奖励或者充话费的行为完成这个闭环模式;
在当前新的项目中是要抽奖并实时下发奖励,具体就是直接把对应抽中的金额下发到用户的微信零钱里面
效果
~
准备条件
1、商户号码
2、APIV3秘钥
3、证书系列
4、api cert
5、需要在小程序进行绑定
参考资料
~
参考项目1
https://github.com/wechatpay-apiv3/wechatpay-php
~
参考项目2
https://github.com/TheNorthMemory/wechatpay-php
相关细节
~
调用下发的接口,会返回以下信息,我们不能通过该成功回调去判断是否真的已经发放成功了,这是V3很重要的一点
下发的数据结构
"appid" => "wxcc26cf72611aeef0",
"out_batch_no" => "45465plfk2020042013",
"batch_name" => "2019年1月深圳分部报销单",
"batch_remark" => "2019年1月深圳分部报销单",
"total_amount" => 30,
"total_num" => 1,
"transfer_detail_list" => [[
"out_detail_no" => "1234x23zy545Bd5436",
"transfer_amount" => 30,
"transfer_remark" => "2020年4月报销",
"openid" => "osPw15JkAUgpY6aPTrnBIg2gZ5zU"
],]
~
~
{
"appid": "wxcc26cf72611aeef0",
"batch_id": "1030001083101257713912022062300867725335",
"detail_id": "1040001083101257713912022062300861404139",
"detail_status": "FAIL",
"fail_reason": "TRANSFER_QUOTA_EXCEED",
"openid": "osPw15JkAUgpY6aPTrnBIg2gZ5zU",
"out_batch_no": "plfk2020042013",
"out_detail_no": "x23zy545Bd5436",
"transfer_amount": 10,
"transfer_remark": "2020年4月报销",
"update_time": "2022-06-23T09:43:52+08:00"
}
~
到账属于准实时
PAYEE_ACCOUNT_ABNORMAL:用户账户收款异常,请引导用户完善其在微信支付的身份信息以继续收款
REALNAME_ACCOUNT_RECEIVED_QUOTA_EXCEED:用户账户收款受限,请引导用户在微信支付查看详情
以下场景,即使调用成功也不会成功发放
1)用户微信支付被封
2)用户没有实名认证
待办
后面还有一些优化事项需要完成
2)抽奖规则梳理
1)安全策略,这块就是通过商户后台进行设置以下事项
1)下发最高奖励设置
2)单日下发次数限制
3)请求安全校验,真实下发之前,对入参进行校验,以排查一些非法的请求。
商家转账到零钱
答题抽奖活动
答题活动抽奖
关于到账实时性问题解答
到账有4-5秒的延时,所以不是实时的
请求时间
到账时间
请求时间11:01:51
到账时间11:01:55
所以会有几秒钟的延时