狀況描述:
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
不要加底線什麼的。我之前就是遇到這個問題,已經解決了。
你好 我也遇到了相同的問題 不知道你的解決了沒
參數名稱參與md5計算嗎?
二次簽章的時間戳是 產生pre_payid時的時間戳