ホームページ > バックエンド開発 > PHPチュートリアル > Alipay APPのphpバックグラウンド署名と署名検証の実装方法

Alipay APPのphpバックグラウンド署名と署名検証の実装方法

小云云
リリース: 2023-03-21 11:42:02
オリジナル
3720 人が閲覧しました

署名と署名検証はAPP側でも完了できます。セキュリティの問題を考慮すると、署名と署名検証はサーバー側で完了するのが最善です。これはAlipayの公式推奨でもあるため、PHP側で署名を渡す必要があります。パラメータをAPP側に渡します。詳細な手順については本文を参照してください:
1. php Alipay SDK をダウンロードします
https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.eCtVsf&treeId=54&articleId=103419&docType=1 (旧) )
https://docs.open.alipay.com/54/103419/ (新規)
2. Alipay アプリの支払いリクエスト パラメーターのドキュメント、スプライス リクエスト パラメーター、署名を表示します
アプリの支払いリクエスト パラメーターの説明
https://doc .open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.wM4mV1&treeId=204&articleId=105465&docType=1 (旧)
https://docs.open.alipay.com/204/105465/ (新) )
最初のパラメーターのスプライシングにより署名が生成され、その後、前のパラメーターと署名が組み立てられます。コアコードは次のとおりです:

    require_once '/Alipay/aop/AopClient.php';    $private_path =  "/Alipay/key/rsa_private_key.pem";//私钥路径
    //构造业务请求参数的集合(订单信息)
    $content = array();    $content['subject'] = "商品的标题/交易标题/订单标题/订单关键字等";    
    $content['out_trade_no'] = "商户网站唯一订单号";    
    $content['timeout_express'] = "该笔订单允许的最晚付款时间";   
     $content['total_amount'] = "订单总金额(必须定义成浮点型)";    
     $content['product_code'] = "QUICK_MSECURITY_PAY";/销售产品码,固定值   
      $con = json_encode($content);//$content是biz_content的值,将之转化成json字符串
ログイン後にコピー


    //公共参数
    $Client = new \AopClient();//实例化支付宝sdk里面的AopClient类,下单时需要的操作,都在这个类里面
    $param['app_id'] = '支付宝分配给开发者的应用ID';    $param['method'] = 'alipay.trade.app.pay';//接口名称,固定值
    $param['charset'] = 'utf-8';//请求使用的编码格式
    $param['sign_type'] = 'RSA2';//商户生成签名字符串所使用的签名算法类型
    $param['timestamp'] = date("Y-m-d Hi:i:s");//发送请求的时间
    $param['version'] = '1.0';//调用的接口版本,固定为:1.0
    $param['notify_url'] = '支付宝服务器异步回调地址';    $param['biz_content'] = $con;//业务请求参数的集合,长度不限,json格式,即前面一步得到的
    $paramStr = $Client->getSignContent($param);//组装请求签名参数
    $sign = $Client->alonersaSign($paramStr, $private_path, 'RSA2', true);//生成签名
    $param['sign'] = $sign;    $str = $Client->getSignContentUrlencode($param);//最终请求参数
ログイン後にコピー

リクエストの説明、Alipay は非常に明確に述べています。これもスクリーンショットです:

Alipay APPのphpバックグラウンド署名と署名検証の実装方法

3. 支払いが成功すると、アプリは文字列を返します。 、顧客サービス クライアントも判断する必要があるため、以下に示すように、ここではあまり詳しく説明しません:

Alipay APPのphpバックグラウンド署名と署名検証の実装方法次のステップは、Alipay がデータを非同期的に PHP サーバーに返すことを確認することです。投稿モードの非同期コールバックアドレス:

function notify()
    {
        require_once('/alipay/aop/AopClient.php');        $aop = new \AopClient;        //$public_path = "key/rsa_public_key.pem";//公钥路径
        $aop->alipayrsaPublicKey = "支付宝公钥";        //此处验签方式必须与下单时的签名方式一致
        $flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");        //验签通过后再实现业务逻辑,比如修改订单表中的支付状态。
        /**
         *  ①验签通过后核实如下参数out_trade_no、total_amount、seller_id
         *  ②修改订单表
        **/
        //打印success,应答支付宝。必须保证本界面无错误。只打印了success,否则支付宝将重复请求回调地址。
        echo 'success';
    }
ログイン後にコピー
ログイン後にコピー

追記:

署名は以前に検証されましたが、失敗しました。 長い間探した後、ついに解決しました。文書には、RSA2 公開キーではなく、Alipay 公開キーが使用されると記載されています。ここでは特に注意が必要です。間違ったものを使用しないでください。

Alipay APPのphpバックグラウンド署名と署名検証の実装方法

著作権ステートメント。 : この記事はブロガーによるオリジナル記事です。ブロガーの許可なく転載を禁じます。


Alipay APPのphpバックグラウンド署名と署名検証の実装方法

署名と署名検証はAPP側でも完了できます。セキュリティの問題を考慮すると、署名と署名検証はAlipayの公式推奨でもあるため、PHP側で行う必要があります。署名されたパラメータをアプリ側に送信します。詳細な手順については本文を参照してください:

1. php Alipay SDK をダウンロードします

https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.eCtVsf&treeId=54&articleId=103419&docType=1 (旧) )
https://docs.open.alipay.com/54/103419/ (新規)

2. Alipay アプリの支払いリクエスト パラメーターのドキュメント、スプライス リクエスト パラメーター、署名を表示します

アプリの支払いリクエスト パラメーターの説明
https://doc .open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.wM4mV1&treeId=204&articleId=105465&docType=1 (旧)
https://docs.open.alipay.com/204/105465/ (新) )
最初のパラメーターのスプライシングにより署名が生成され、その後、前のパラメーターと署名が組み立てられます。コアコードは次のとおりです:

    require_once '/Alipay/aop/AopClient.php';    $private_path =  "/Alipay/key/rsa_private_key.pem";//私钥路径
    //构造业务请求参数的集合(订单信息)
    $content = array();    $content['subject'] = "商品的标题/交易标题/订单标题/订单关键字等";    $content['out_trade_no'] = "商户网站唯一订单号";    $content['timeout_express'] = "该笔订单允许的最晚付款时间";    $content['total_amount'] = "订单总金额(必须定义成浮点型)";    $content['product_code'] = "QUICK_MSECURITY_PAY";/销售产品码,固定值    $con = json_encode($content);//$content是biz_content的值,将之转化成json字符串
ログイン後にコピー




  •     //公共参数
        $Client = new \AopClient();//实例化支付宝sdk里面的AopClient类,下单时需要的操作,都在这个类里面
        $param['app_id'] = '支付宝分配给开发者的应用ID';    $param['method'] = 'alipay.trade.app.pay';//接口名称,固定值
        $param['charset'] = 'utf-8';//请求使用的编码格式
        $param['sign_type'] = 'RSA2';//商户生成签名字符串所使用的签名算法类型
        $param['timestamp'] = date("Y-m-d Hi:i:s");//发送请求的时间
        $param['version'] = '1.0';//调用的接口版本,固定为:1.0
        $param['notify_url'] = '支付宝服务器异步回调地址';    $param['biz_content'] = $con;//业务请求参数的集合,长度不限,json格式,即前面一步得到的
    
        $paramStr = $Client->getSignContent($param);//组装请求签名参数
        $sign = $Client->alonersaSign($paramStr, $private_path, 'RSA2', true);//生成签名
        $param['sign'] = $sign;    $str = $Client->getSignContentUrlencode($param);//最终请求参数
    ログイン後にコピー

    要求された説明、Alipay はそれを非常に明確にしました、ここにもう一度スクリーンショットがあります:

  • 三、验签
    App 支付成功后会有返回字符串,客服端也需要判断,这里不罗嗦,如下图:
    Alipay APPのphpバックグラウンド署名と署名検証の実装方法
    下一步就是在php服务端进行验签,支付宝异步会以post方式返回数据到异步回调地址:

    function notify()
        {
            require_once('/alipay/aop/AopClient.php');        $aop = new \AopClient;        //$public_path = "key/rsa_public_key.pem";//公钥路径
            $aop->alipayrsaPublicKey = "支付宝公钥";        //此处验签方式必须与下单时的签名方式一致
            $flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");        //验签通过后再实现业务逻辑,比如修改订单表中的支付状态。
            /**
             *  ①验签通过后核实如下参数out_trade_no、total_amount、seller_id
             *  ②修改订单表
            **/
            //打印success,应答支付宝。必须保证本界面无错误。只打印了success,否则支付宝将重复请求回调地址。
            echo 'success';
        }
    ログイン後にコピー
    ログイン後にコピー

    后记: 
    之前一直验签失败,找了好久,终于解决了。文档中说,验签用的是支付宝公钥,并不是RSA2公钥,这里需要特别注意,不要用错了 
    Alipay APPのphpバックグラウンド署名と署名検証の実装方法

    请看截图: 
    Alipay APPのphpバックグラウンド署名と署名検証の実装方法

    相关推荐:

    支付宝支付之php后台签名实现方法


    以上がAlipay APPのphpバックグラウンド署名と署名検証の実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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