ホームページ >バックエンド開発 >PHPチュートリアル >サーバー側にAPP決済機能を実装

サーバー側にAPP決済機能を実装

php中世界最好的语言
php中世界最好的语言オリジナル
2018-03-24 13:48:062152ブラウズ

今回は、サーバー側でAPP決済機能を実装する方法と、サーバー側でAPP決済機能を実装する方法についてのメモをお送りします。以下は実際のケースです。見てみましょう。

Alipay の支払いは多くのシナリオに分かれています。ここでは、この期間中に特に大きな落とし穴に遭遇したため、統合プロセスについて簡単に説明し、遭遇した問題と解決策について説明します。

会社のシンプルなビジネスにより、Alipay支払いのみをサポートしており、返金、問い合わせなどの追加機能について気にする必要はありません。したがって、この記事では、サーバーが支払い注文情報を取得するためにAPPを準備する方法についてのみ説明しますAlipay 決済インターフェースを使用する場合のおおよそのプロセスは次のとおりです

1. アプリケーションと構成を作成します

まず、Ant Financial 開発プラットフォーム (open.alipay.com) にアプリケーションを登録する必要があります。ここでの主なタスクは、契約に署名し、アプリケーションの RSA2 公開キーと秘密キーを生成することです。同時に、Alipay などから提供される支払い公開キーを取得します。公式 Web サイトのこの部分の背景。これは比較的単純です。次に、対応する SDK をダウンロードします。ここでは PHP バックグラウンドでサービスを統合しているため、PHP SDK をダウンロードしました。 .alipay.com/54/103419/

3. アクセスできる実際のドメイン名を準備します

4. ケース

上記の 3 つの部分が完了したら、次は、独自のビジネスコード4.1. APPによる支払い時の支払い注文情報の整理

<?php
require_once (DIR.&#39;/alipay-sdk-PHP-20171023143822/AopSdk.php&#39;);
class Alipay
{
 /**
 * 应用ID
 */
 const APPID = &#39;你的应用ID&#39;;
 /**
 *请填写开发者私钥去头去尾去回车,一行字符串
 */
 const RSA_PRIVATE_KEY = &#39;应用对应开发者私钥&#39;;
 /**
 *请填写支付宝公钥,一行字符串
 */
 const ALIPAY_RSA_PUBLIC_KEY = &#39;支付宝提供的公钥&#39;;
 /**
 * 支付宝服务器主动通知商户服务器里指定的页面
 * @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;
 }
 }
}
4. Alipay支払い成功後の非同期コールバック処理

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。