情况描述:
1,调用同一下单接口,已经获取prepay_id等值了呀!
2,给app提交数据之前,有个二次签名嘛,我按规则签了呀!//请大神看看我写的代码是否正确
3,为啥会出现这种问题?
4,跪求大神指导!
这是我二次签名的代码:
............ //设置参数等等
1 2 3 4 5 6 7 8 9 10 11 | $wx_result = $wechatAppPay ->unifiedOrder( $params );
$sign_array = array ();
$sign_array ['appid'] = $wx_result ['appid'];
$sign_array ['mch_id'] = $wx_result ['mch_id'];
$sign_array ['prepay_id'] = $wx_result ['prepay_id'];
$sign_array ['nonce_str'] = $wx_result ['nonce_str'];
$sign_array ['timeStamp'] = time();
$sign_array ['package'] = $wx_result ['Sign=WXPay'];
$sign_two = $wechatAppPay ->MakeSign( $sign_array );
|
Salin selepas log masuk
下面是我生成签名的函数代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
public function MakeSign( $params ){
ksort( $params );
$string = $this ->ToUrlParams( $params );
$string = $string . "&key=" . $this ->key;
$string = md5( $string );
$result = strtoupper ( $string );
return $result ;
}
public function ToUrlParams( $params ){
$string = '';
if ( ! empty ( $params ) ){
$array = array ();
foreach ( $params as $key => $value ){
$array [] = $key .'='. $value ;
}
$string = implode( "&" , $array );
}
return $string ;
}
|
Salin selepas log masuk
这个问题已解决,原因是第二次签名时的参数名不对。
/////////////////////////////更新 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
但是回调不知带哦怎么写了!!
但收不到值(收不到微信给发的 支付结果通用通知 ),也不知道是怎么回事
接收微信支付异步通知回调地址:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public function wxResult()
{
$data = array ();
$data = $this ->wechatAppPay->getNotifyData();
$data2 = $this ->wechatAppPay->replyNotify();
$this ->jsonmsg( $data );
}
|
Salin selepas log masuk
获取通知数据的函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public function getNotifyData(){
$xml = $GLOBALS ['HTTP_RAW_POST_DATA'];
$data = array ();
if ( empty ( $xml ) ){
return false;
}
$data = $this ->xml_to_data( $xml );
if ( ! empty ( $data ['return_code']) ){
if ( $data ['return_code'] == 'FAIL' ){
return false;
}
}
return $data ;
}
|
Salin selepas log masuk
接收通知成功后应答输出XML数据函数:
1 2 3 4 5 6 7 8 9 10 11 |
public function replyNotify(){
$data ['return_code'] = 'SUCCESS';
$data ['return_msg'] = 'OK';
$xml = $this ->data_to_xml( $data );
echo $xml ;
die ();
}
|
Salin selepas log masuk
**已解决
///////更新/////////////////商户系统对于支付结果通知的内容做签名验证///////////////////////////////**
正在做商户系统对于支付结果通知的内容做签名验证,咋验证?
是啥?逻辑思路是啥?
回复内容:
支付接口文档
文档中规定的字段
appid
partnerid
prepayid
package
noncestr
timestamp
sign
请不要更改参数名大小写,也不要加下划线什么的。我之前就是遇到这个问题,已经解决了。
你好 我也遇到了相同的问题 不知道你的解决了没
参数名参与md5计算吗?
二次签名的时间戳是 生成pre_payid时的时间戳