大概从去年年底,微信官方即财付通的“企业付款到零钱”能力做了升级,除了纳入到当下的“微信商家转账”能力范畴之内,最大的改变,就是在于C端用户如何接受转账/入账的流程上。
也因此,不少接入微信企业付款到零钱的旧系统或产品,需要做适应性的改造/接口升级。
东哥在网上找了一圈,发现系统性介绍这块改造/升级的信息不多,那东哥就花时间整理了出来。
对于业务代码改造,最大的改造在于:之前通过微信小程序/公众号的openid完成静默转账,到现在生成package_info,再手动确认接收转账的模式。
更重要的是,不仅仅只是代码的改造,还涉及到交互流程,产品经理们也要想到业务流程代码可能也要大改。
部分业务,因为涉及到“用户主动确认收款后”的动作,这个如何做用户的通知,在业务流程上,也要好好考虑,保障这个触达率,及触达后的确认率才行。
以最近的微信官方文档为例,东哥用“微信评价返现红包系统”作为示例,从“发起转账->生成package_info->用户确认收款”三个核心环节,来做一个改造演示,应该能帮到不少关注东哥的读者。
1.发起转账,服务端代码:以java代码为示例
WxPayAuthConfig wxPayAuthConfig = transferReq.getWxPayAuthConfig();
Config config = getWxReqConfig(wxPayAuthConfig);
System.out.println("==============>config==========>"+config);
String req = "{"
+ "\"appid\":\"" + wxPayAuthConfig.getAppId() + "\","
+ "\"out_bill_no\":\""+transferReq.getPartnerTradeNo()+"\","
+ "\"transfer_scene_id\":\""+transferReq.getTransferSceneId()+"\","
+ "\"openid\":\""+transferReq.getOpenid()+"\","
// + "\"user_name\":\"encrypted_user_name\"," // config.createEncryptor().encrypt("张三")
+ "\"transfer_amount\":"+transferReq.getTransAmount()+","
+ "\"transfer_remark\":\""+transferReq.getTransferRemark()+"\","
+ "\"notify_url\":\"https://www.weixin.qq.com/wxpay/pay.php\","
+ "\"user_recv_perception\":\"现金奖励\","
+ "\"transfer_scene_report_infos\":["
+ " {\"info_type\":\"活动名称\",\"info_content\":\"新会员有礼\"},"
+ " {\"info_type\":\"奖励说明\",\"info_content\":\"新会员首单奖励\"}"
+ "]"
+ "}";
HttpHeaders headers = new HttpHeaders();
headers.addHeader("Accept", MediaType.APPLICATION_JSON.getValue());
headers.addHeader("Content-Type", MediaType.APPLICATION_JSON.getValue());
headers.addHeader("Wechatpay-Serial", config.createEncryptor().getWechatpaySerial());
// 请求体
JsonRequestBody body = new JsonRequestBody.Builder().body(req).build();
log.info("【微信商家打款】请求体:{}", req);
HttpRequest httpRequest =
new HttpRequest.Builder()
.httpMethod(HttpMethod.POST)
.url(TRANSFER_URL)
.headers(headers)
.body(body)
.build();
HttpClient httpClient = new DefaultHttpClientBuilder().config(config).build();
HttpResponse<WxTransferRsp> httpResponse = httpClient.execute(httpRequest,
WxTransferRsp.class);
log.info("【微信商家打款】返回结果:{}", httpResponse.getServiceResponse());
WxTransferRsp serviceResponse = httpResponse.getServiceResponse();
log.info("【微信商家打款-更新平台订单状态和流水号,跳转领取页面的package信息】 开始..............");
// TODO 更新平台订单状态和流水号
log.info("【微信商家打款-更新平台订单状态和流水号,跳转领取页面的package信息】 结束..............");
return serviceResponse;
2.服务端生成的package,用户接收转账的客户端代码示例
wx.ready(function () {
wx.checkJsApi({
jsApiList: ['requestMerchantTransfer'],
success: function (res) {
if (res.checkResult['requestMerchantTransfer']) {
WeixinJSBridge.invoke('requestMerchantTransfer', {
mchId: mchId,
//appid
appId: appId,
package: packageInfo,
},
function (res) {
if (res.err_msg === 'requestMerchantTransfer:ok') {
// res.err_msg将在页面展示成功后返回应用时返回success,并不代表付款成功
}
}
);
} else {
//alert('你的微信版本过低,请更新至最新版本。');
}
}
});
3.最后完成“确认收款”,交互体验如下
https://gitee.com/elton_xia/wechat-transfer-hb-v3
有不了解的可以找东哥交流。本文严禁除优快云外的其他转载!