一、报错信息
接口名称:requestMerchantTransfer,WXOpenBusinessView
对应业务:微信支付商家转账 -> 「JSAPI调起用户确认收款」,「APP调起用户确认收款」
错误信息:package_info信息有误,请返回联系商家处理
错误截图:

二、问题原因
根本原因:调用requestMerchantTransfer接口所传递“package”的参数值被篡改,系统校验未通过。
安全机制:为了商户资金安全,使用商家转账时会校验调起用户确认收款时所传递“package”参数值是否被篡改。
三、快速排查
- 检查调用“requestMerchantTransfer”接口“package”字段参数值与调用发起转账接口返回的“package_info”参数值是否完全一致
- 检查调用“requestMerchantTransfer”接口“package”字段参数值格式是否为”string”
- APP调起用户确认收款时,“query”参数使用URL的query string方式传递参数,格式为key=value&key2=value2,其中value、value2需要进行UrlEncode处理
四、解决方案
JSAPI调起用户确认收款,需要服务端给到前端的“package”参数值与发起转账接口返回的“package_info”参数值完全一致,如果存在转义、修改需要恢复原样
APP调起用户确认收款将“query”参数中的值进行UrlEncode处理
int wxSdkVersion = api.getWXAppSupportAPI();
if (wxSdkVersion >= Build.OPEN_BUSINESS_VIEW_SDK_iNT) {
WXOpenBusinessView.Req req = new WXOpenBusinessView.Req();
req.businessType = "requestMerchantTransfer";
req.query = "mchId=1230000000&appId=wx8888888888888888&package=affffddafdfafddffda%3D%3D";
//需要对package值进行UrlEncode处理
Boolean ret = api.sendReq(req);
} else {
/*需提示用户升级微信版本*/
}