今回は、サーバー側でAPP決済機能を実装する方法と、サーバー側でAPP決済機能を実装する方法についてのメモをお送りします。以下は実際のケースです。見てみましょう。
Alipay の支払いは多くのシナリオに分かれています。ここでは、この期間中に特に大きな落とし穴に遭遇したため、統合プロセスについて簡単に説明し、遭遇した問題と解決策について説明します。
会社のシンプルなビジネスにより、Alipay支払いのみをサポートしており、返金、問い合わせなどの追加機能について気にする必要はありません。したがって、この記事では、サーバーが支払い注文情報を取得するためにAPPを準備する方法についてのみ説明しますAlipay 決済インターフェースを使用する場合のおおよそのプロセスは次のとおりです1. アプリケーションと構成を作成します
まず、Ant Financial 開発プラットフォーム (open.alipay.com) にアプリケーションを登録する必要があります。ここでの主なタスクは、契約に署名し、アプリケーションの RSA2 公開キーと秘密キーを生成することです。同時に、Alipay などから提供される支払い公開キーを取得します。公式 Web サイトのこの部分の背景。これは比較的単純です。次に、対応する SDK をダウンロードします。ここでは PHP バックグラウンドでサービスを統合しているため、PHP SDK をダウンロードしました。 .alipay.com/54/103419/3. アクセスできる実際のドメイン名を準備します
上記の 3 つの部分が完了したら、次は、独自のビジネスコード4.1. APPによる支払い時の支払い注文情報の整理
<?php require_once (DIR.'/alipay-sdk-PHP-20171023143822/AopSdk.php'); class Alipay { /** * 应用ID */ const APPID = '你的应用ID'; /** *请填写开发者私钥去头去尾去回车,一行字符串 */ const RSA_PRIVATE_KEY = '应用对应开发者私钥'; /** *请填写支付宝公钥,一行字符串 */ const ALIPAY_RSA_PUBLIC_KEY = '支付宝提供的公钥'; /** * 支付宝服务器主动通知商户服务器里指定的页面 * @var string */ private $callback = "http://www.test.com/notify/alipay_notify.php"; /** *生成APP支付订单信息 * @param string $orderId 商品订单ID * @param string $subject 支付商品的标题 * @param string $body 支付商品描述 * @param float $pre_price 商品总支付金额 * @param int $expire 支付交易时间 * @return bool|string 返回支付宝签名后订单信息,否则返回false */ public function unifiedorder($orderId, $subject,$body,$pre_price,$expire){ try{ $aop = new \AopClient(); $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do"; $aop->appId = self::APPID; $aop->rsaPrivateKey = self::RSA_PRIVATE_KEY; $aop->format = "json"; $aop->charset = "UTF-8"; $aop->signType = "RSA2"; $aop->alipayrsaPublicKey = self::ALIPAY_RSA_PUBLIC_KEY; //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay $request = new \AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数 $bizcontent = "{\"body\":\"{$body}\"," //支付商品描述 . "\"subject\":\"{$subject}\"," //支付商品的标题 . "\"out_trade_no\":\"{$orderId}\"," //商户网站唯一订单号 . "\"timeout_express\":\"{$expire}m\"," //该笔订单允许的最晚付款时间,逾期将关闭交易 . "\"total_amount\":\"{$pre_price}\"," //订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000] . "\"product_code\":\"QUICK_MSECURITY_PAY\"" . "}"; $request->setNotifyUrl($this->callback); $request->setBizContent($bizcontent); //这里和普通的接口调用不同,使用的是sdkExecute $response = $aop->sdkExecute($request); //htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 return htmlspecialchars($response);//就是orderString 可以直接给客户端请求,无需再做处理。 }catch (\Exception $e){ return false; } } }
5. 発生した問題
40001 => isv.invalid-signature
が報告され続けました。原因を調べるために、アプリケーションの RSA2 公開鍵と秘密鍵を何度か再生成しましたが、効果がないことがわかりました。最後に、オンライン情報と組み合わせると、
Alipay コールバック アドレスの NoticeUrl には '?' を含めることはできず、?
5.2 の後に Alipay 非同期通知は成功しますが、$_POST は空であることがわかりました。これにも費用がかかります 検索に時間がかかり、最初はAlipayの提案に従ってHTTSを使用してリクエストしました。しかし、この方法では、アプリケーションのバックグラウンドでパラメーターの内容が存在しないことが通知され続けます。最後に、私たちのアプリケーションは HTTS 双方向認証を使用しているため、Alipay のサーバー コールバックのパラメーターが空であることを思い出しました。最後に、コールバックアドレスをHTTPに変更し、検証に合格しました
発生した問題を解決したら、まずAlipayのドキュメントの説明とAlipayが提供するエラーコードの説明を確認してください。うまくいかない場合は、BaiduまたはGoogleを使用してください。私自身の継続的なテストと検証により、最終的に問題は必ず解決されます現時点では、Alipay APPの支払い機能は完了しており、他のAPPの返金、明細書などの機能は継続されていません。 Alipay の公式 Web サイトのドキュメントと、Alipay が提供する SDK を独自のアプリケーションに統合するのは時間の問題です。 この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨読書:PHPコールバック関数と匿名関数の使用の詳細な説明
phpstudy2018のディレクトリサービス権限にアクセスWeChat支払い(jsapi支払い)プロセスのThinkPHP実装チュートリアルの詳細な説明_phpの例
以上がサーバー側にAPP決済機能を実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。