ホームページ > バックエンド開発 > PHPチュートリアル > 支払い確認署名支払いに失敗しましたか? —— WeChat Payアプリ決済

支払い確認署名支払いに失敗しましたか? —— WeChat Payアプリ決済

ringa_lee
リリース: 2023-03-01 08:32:01
オリジナル
5554 人が閲覧しました

状況の説明:

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が生成されたときのタイムスタンプです


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート