ホームページ >バックエンド開発 >PHPチュートリアル >支払い確認署名支払いに失敗しましたか? —— WeChat Payアプリ決済
状況の説明:
1. 同じ注文インターフェイスを呼び出し、prepay_id と同等の値を取得します。
2. アプリにデータを送信する前に、ルールに従って署名を行います。 //私が書いたコードが正しいか確認してください
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; }
This質問は解決されました 解決しました。理由は、2 番目のシグネチャのパラメーター名が間違っているためです。
////////////////////////////更新///////////////// // /////////////////////////////////////////////// ///// /////////////////////////////////////////// //////// ////////////////////////////////
でもやり方がわからないコールバックを書いてください! !
しかし、値を受け取ることができず(WeChatからの支払い結果の一般的な通知が受け取れない)、何が起こっているのかわかりません
WeChat支払いの非同期通知コールバックアドレスを受信する:
$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が生成されたときのタイムスタンプです