服务商分账下单,公众号下调用js支付,使用的是HMAC-SHA256签名方式,前端获取到返回数据后调用支付,前端也是使用的"signType":"HMAC-SHA256",签名方式,一直报支付验证签名失败;
相同代码相同参数使用MD5加密方式,去掉此参数$post['profit_sharing'] = $profit_sharing;的时候是可以支付的
下面是分账的php调用代码
$appid = 'xxxxxxxxxx';//如果是公众号 就是公众号的appid
$body = 'tt11';
$mch_id = 'xxxxxx';//商户号
$sub_mch_id = 'xxxxxx';//子商户号
$sub_appid = 'xxxxxx';//子商户公众账号ID
$device_info ='WEB';
$nonce_str = $this->nonce_str();//随机字符串
// $signtype ='MD5';
$signtype ='HMAC-SHA256';
$notify_url = 'xxxxxx';
$out_trade_no = $this->order_number($openid);//商户订单号
$spbill_create_ip = 'xxxxxx';
$total_fee = $price*100;//因为充值金额最小是1 而且单位为分 如果是充值1元所以这里需要*100
$trade_type = 'JSAPI';//交易类型 默认
$profit_sharing="Y";
$post['appid'] = $appid;
$post['body'] = $body;
$post['mch_id'] = $mch_id;
$post['nonce_str'] = $nonce_str; //随机字符串
$post['notify_url'] = $notify_url;
$post['out_trade_no'] = $out_trade_no;
$post['profit_sharing'] = $profit_sharing;//分账修改
$post['sign_type'] =$signtype;
$post['spbill_create_ip'] = $spbill_create_ip; //终端的ip
$post['sub_appid'] = $sub_appid;
$post['sub_mch_id'] = $sub_mch_id;
$post['sub_openid'] = $openid;
$post['total_fee'] = $total_fee; //总金额 最低为一块钱 必须是整数
$post['trade_type'] = $trade_type;
$sign = $this->sign_hash_hmac($post,$result['wxkey']); //签名
// $sign = $this->sign($post,$result['wxkey']); //签名
$post_xml = '<xml>'.
'<appid>'.$appid.'</appid>
<body>'.$body.'</body>
<mch_id>'.$mch_id.'</mch_id>
<nonce_str>'.$nonce_str.'</nonce_str>
<notify_url>'.$notify_url.'</notify_url>
<out_trade_no>'.$out_trade_no.'</out_trade_no>
<profit_sharing>' . $profit_sharing . '</profit_sharing>
<sign_type>' . $signtype . '</sign_type>
<spbill_create_ip>'.$spbill_create_ip.'</spbill_create_ip>
<sub_appid>'.$sub_appid.'</sub_appid>
<sub_mch_id>'.$sub_mch_id.'</sub_mch_id>
<sub_openid>'.$openid.'</sub_openid>
<total_fee>'.$total_fee.'</total_fee>
<trade_type>'.$trade_type.'</trade_type>
<sign>'.$sign.'</sign>
</xml> ';
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
$xml = $this->http_request($url,$post_xml);
$array = $this->xml($xml);//全要大写
前端调用代码;
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId":appId, //公众号名称,由商户传入
"timeStamp":timeStamp, //时间戳,自1970年以来的秒数
"nonceStr":nonceStr, //随机串
"package":package,
"signType":"HMAC-SHA256", //微信签名方式:
"paySign":paySign //微信签名
},
function(res){
alert(JSON.stringify(res));
});
前端所有调用参数均为后端返回,包括时间戳
麻烦帮看一下到底是哪里的问题?整了四五天了,该如何修改。
签名问题请参考这个哈https://developers.weixin.qq.com/community/develop/doc/000cc4ffa2c2083e565b4dabe5fc09
可参考以下指引:https://wechatpay-api.gitbook.io/wechatpay-api-v3/chang-jian-wen-ti/qavatar
商户侧验证微信返回签名的验签示例(PHP):
链接:https://pan.baidu.com/s/1ojWl4o3btpxymQmvRjeKBg
提取码:yx8o
验证签名工具:
链接:https://pan.baidu.com/s/1ixOAnYyZVW13dFr0jWVpvw
提取码:wujv
是这个地方吗,没有看到可以技术在线客服呢?