情况描述:
1,调用同一下单接口,已经获取prepay_id等值了呀!
2,给app提交数据之前,有个二次签名嘛,我按规则签了呀!//请大神看看我写的代码是否正确
3,为啥会出现这种问题?
4,跪求大神指导!
这是我二次签名的代码:
............ //设置参数等等
$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);//调用签名生成函数
下面是我生成签名的函数代码:
/**
* 生成签名
* @return 签名
*/
public function MakeSign( $params ){
//签名步骤一:按字典序排序数组参数
ksort($params);
$string = $this->ToUrlParams($params);//调用拼接函数
//签名步骤二:在string后加入KEY
$string = $string . "&key=".$this->key;
//签名步骤三:MD5加密
$string = md5($string);
//签名步骤四:所有字符转为大写
$result = strtoupper($string);
return $result;
}
/**
* 将参数拼接为url: key=value&key=value
* @param $params
* @return string
*/
public function ToUrlParams( $params ){
$string = '';
if( !empty($params) ){
$array = array();
foreach( $params as $key => $value ){
$array[] = $key.'='.$value;
}
$string = implode("&",$array);
}
return $string;
}这个问题已解决,原因是第二次签名时的参数名不对。
/////////////////////////////更新 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
但是回调不知带哦怎么写了!!
但收不到值(收不到微信给发的 支付结果通用通知 ),也不知道是怎么回事
接收微信支付异步通知回调地址:
$notify_url = 'http://www.XXXXXX.com/index.php/apps/cart/wxResult';
//微信支付回调函数
public function wxResult()
{
$data = array();
$data = $this->wechatAppPay->getNotifyData();//调用获取数据函数
////////********逻辑处理********//////////
$data2 = $this->wechatAppPay->replyNotify();//接收通知成功后应答输出XML数据
$this->jsonmsg($data);
}获取通知数据的函数:
/**
*
* 获取支付结果通知数据
* return array
*/
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;
}接收通知成功后应答输出XML数据函数:
/**
* 接收通知成功后应答输出XML数据
* @param string $xml
*/
public function replyNotify(){
$data['return_code'] = 'SUCCESS';
$data['return_msg'] = 'OK';
$xml = $this->data_to_xml( $data );
echo $xml;
die();
}**已解决
///////更新/////////////////商户系统对于支付结果通知的内容做签名验证///////////////////////////////**
正在做商户系统对于支付结果通知的内容做签名验证,咋验证?
是啥?逻辑思路是啥?
回复内容:
支付接口文档
文档中规定的字段
appid
partnerid
prepayid
package
noncestr
timestamp
sign
请不要更改参数名大小写,也不要加下划线什么的。我之前就是遇到这个问题,已经解决了。
你好 我也遇到了相同的问题 不知道你的解决了没
参数名参与md5计算吗?
二次签名的时间戳是 生成pre_payid时的时间戳
微信是一款手机通信软件,支持通过手机网络发送语音短信、视频、图片和文字。微信可以单聊及群聊,还能根据地理位置找到附近的人,带给大家全新的移动沟通体验,有需要的小伙伴快来保存下载体验吧!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号