この記事の内容は、PHP が Alipay の支払いプロセスを実装する方法を紹介するものであり、困っている人は参考にしてください
1. まず、サードパーティの支払いについて説明します。 いわゆるサードパーティ決済は、いくつかの大手銀行と契約を締結し、一定の強度と信頼性が保証されているサードパーティの独立機関によって提供される取引プラットフォームです
現在利用されている最も一般的なものは、市場には、Alipay、Tenpay、オンライン バンキング、Yibao Pay などが含まれます。Web サイトがサードパーティの支払いを実装する必要がある場合は、まずサードパーティにアカウントを申請し、契約が発効した後に契約に署名する必要があります。サードパーティの支払いプラットフォームにより、オンライン支払い機能が有効になります。
2. 第三者支払いの原則
2.1 ユーザーはモールのウェブサイトに対して注文を確認するリクエストを開始します
2.2 モールのウェブサイトがリクエストを受け取ります 注文データをデータベースまたはその他の記憶媒体に保存します
2.3 注文確認ページに戻り、注文金額とその他の情報が表示されます
2.4 ユーザーが支払いを確認し、支払いリクエストを開始します。注: 支払いリクエストは、モールの Web サイトではなく、支払いゲートウェイ (Alipay、オンライン バンキングなど) に送信されます。
2.5 支払いページを表示する
2.6 ユーザーが認証情報(アカウントパスワードなど)を入力して送信する
2.7 ここでのステップは2つあり、1つは引き落としが成功した後のものです。 、ページは支払い結果ページにジャンプします(ユーザーに表示されます)、もう 1 つは支払い通知です。これら 2 つのステップは、支払い通知を受信した後、順序を問わず同時に実行される場合があります。検証ルールに従って情報を取得し、対応する変更を行います(たとえば、有効な場合は注文を支払いステータスに変更し、無効な場合は不正なリクエスト情報が記録されます)。
Alipay を例に挙げます。Alipay インターフェイスを Web サイトに統合したい場合は、まず Alipay アカウントを取得し、次に Alipay でオンライン決済ビジネスを申請し、契約に署名する必要があります。契約が発効すると、Alipay は Web サイトにパートナー ID とセキュリティ検証コードを付与します。これらの 2 つにより、Alipay インターフェースは上記の手順の 4 つと 7 つだけで作成できます。このステップには、モールと支払いゲートウェイの間の情報交換が含まれます。ステップ 4 は、支払いゲートウェイ (Alipay) にデータを送信することを指します。ステップ 7 は、ウェブサイトの特定のアドレスを要求し、ウェブサイトが検証ルールに従って情報を検証し、応答します。ほとんどすべての決済を開発しています インターフェイスに関しては、これら 2 つの部分の開発に重点が置かれています。決済インターフェイスの原理を理解していれば、決済インターフェイスの開発は難しくありません。
実際、写真を見ると、私たちが行ったことは非常に限られており、基本的には1〜3の間で、注文データを生成し、内部でAlipayを介して認証します(もちろん、一部のショッピングカートと注文ステップは省略))、基本的には処理が終了する。
3. Alipay インターフェースの開発
3.1 インターフェースの導入とテスト
現時点では、Alipay は保証取引、標準即時支払い、二重機能などのいくつかのインターフェイスを提供しています。機能にいくつかの違いがあるだけですが、統合方法は同じです。標準の即時支払いインターフェイスを例に挙げます。 Alipay との契約に署名した後、統合を完了するにはさらにいくつかの手順が必要です。
[セルフサービス統合が必要です] で次に表示されるリンクを選択し、クリックして技術ドキュメントをダウンロードします。
ダウンロードされたファイルには、標準の Alipay トランザクション サービス インターフェイス、マーチャント ツール、インターフェイス統合ガイド、その他のインターフェイス ドキュメント、およびいくつかの言語で書かれたデモが含まれています。インターフェイス ドキュメントに従ってルールに従って新しいものを開発することもできます。デモに基づいてそれを再修正し、Web サイトに統合できます。デバッグ全体を完了するには、支払いインターフェイスの開発がパブリック ネットワーク上で行われる必要があることに注意してください (サーバーは外部ネットワーク経由でアクセスできる必要があります)。外部ネットワークからサーバーにアクセスできない場合、支払い通知を受け取ることができません。デモでの各ファイルの役割 ┈┈┈┈┈┈┈┈┈┈ ┈┈┈┈クラスフォルダ │ │
│ ├alipay_core.function.php ┈┈┈┈┈┈Alipay インターフェース公開関数ファイル │ │ │ ├alipay_notify.class.php┈┈ ┈┈┈┈┈Alipay 通知処理 Class ファイル
│ │ │ ├alipay_submit.class.php┈┈┈┈┈┈┈Alipay インターフェースはクラスファイルの送信を要求します
│ └ AliExpress §alipay.config .php┈┈┈┈┈┈┈ ┈┈┈┈┈基本設定クラス ファイル │ §alipay インターフェースエントリーファイル
│ ify_url.php ┈┈┈┈┈┈┈┈ ┈┈┈┈┈サーバー非同期通知ページ ファイル │ §return_url.php ┈┈┈┈┈┈┈┈┈┈┈┈┈ページジャンプ同期通知ファイル
│
§cacert.pem ┈┈┈┈┈┈┈┈┈ ┈┈┈┈┈┈CURL の SSL CA 証明書ファイルの検証を使用します
│
└readme.txt ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈手順使用します
はここでダウンロードされています(リソースディレクトリ有料フォルダーを参照)。デバッグを容易にするために、いくつかのファイルが追加および変更され、注文情報を保存するためのデータテーブルが追加されています。テストプロセスを完了します。
alipay_config.phpは基本情報設定ファイルで、Alipayバックエンドで取得したPIDとKeyを設定ファイルに書き込む必要があります。
設定項目:
ボックス内のデータは、重点的に変更する必要があるものです。支払い通知アドレスと返送先アドレスの違いは前述しました。ステップ 7 には、支払い結果ページと支払い通知情報の 2 つの項目があり、ユーザーが支払いを完了すると、このアドレスに自動的にジャンプします。返信先アドレス ($return_url) は次のとおりです。
$host = $_SERVER['HTTP_HOST']; //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ //合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址: $alipay_config['partner'] = '****************'; //收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号 $alipay_config['seller_id'] = $alipay_config['partner']; // MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址: $alipay_config['key'] = '****************************'; // 服务器异步通知页面路径 需 $alipay_config['notify_url'] = " // 页面跳转同步通知页面路径 需 $alipay_config['return_url'] = "http://".$host."/paycallback/return"; // 客户端的IP地址 非局域网的外网IP地址,如:221.0.0.1 $alipay_config['exter_invoke_ip'] = "182.92.27.46";
支払い通知アドレスもユーザーの支払いですその後、Alipay はアドレス ($notify_url) を要求します。ただし、支払い通知は Alipay サーバーからの直接リクエストであり、ユーザーには表示されません。これら 2 つのアドレスは、http で始まるフル パス形式である必要があります。テスト プロセスを完了するには、/pay/alipay/notify_url.php がここで書き換えられ、$notify_url がこのファイルにアクセスできる URL に設定されます。これらの項目を構成した後、データベース スクリプト (pay/orders.sql) に従ってデータ テーブルが作成されます。そして、データベースの設定情報に従って mysql_config.php を変更します。Alipay が提供するデモを変更するだけで、支払いリクエストの作成が完了します (ステップ 4)。ここでは、支払いホームページとその他のページが変更されます。ソースコードパッケージの有料ディレクトリ)。まずはテストしてみましょう:
「ご注文情報」を追加しましたデータベース「.
「支払いの確認」ボタンまたは「支払いの確認」リンクをクリックすると、Alipay ページにリダイレクトされます。ボタンをクリックすると、情報がフォームを通じて支払いゲートウェイに送信されます。 POST. 支払い要求データはユーザーに表示される必要がないため、ここではすべて非表示フィールドに書き込まれます。支払い確認リンクは URL 経由で渡されます。Alipay インターフェイスでは POST または GET で送信できるため、どちらの方法でも使用できます。パラメータを支払いゲートウェイに送信した後、ページは支払いページにジャンプします。以下の図を参照してください:
Alipay は 2 つの支払い方法を提供していることがわかります。1 つは Alipay アカウントを通じて支払うことで、もう 1 つは銀行カード支払いを通じて支払うことです。 。たとえば、銀行カードで支払うことを選択し、電子メールまたは携帯電話番号を入力して、次のページに移動します:
当社の請求先 Alipay は、ほぼすべての銀行カードによる支払いをサポートしており、クレジット カードや支店による支払い方法もあります。対応する銀行を選択し、画面の指示に従って支払います。支払いが完了すると、ページは設定ファイルで設定した $return_url アドレスに戻り、「注文ステータス」も変更されます。
注: テストが外部ネットワーク上で実行されない場合 (つまり、支払い通知アドレスを外部インターネット アクセスにすることはできません)、支払い通知を要求することはできず、注文ステータスを自動的に変更することもできません。
3.2 Alipayインターフェース仕様とコード分析
Alipayインターフェース仕様は、/pay/doc/standard Alipayトランザクションサービスインターフェース(フィッシング対策Webサイト専用)を参照できます。 PDF にはすでに比較的詳細な手順が記載されています。
3.2.1 支払いリクエストの作成方法
前回のテストでは、「支払いの確認」をクリックして、Alipayの支払いゲートウェイに情報を送信しました。どのパラメータを支払いゲートウェイに送信するかを考えることができます。 。リクエストパラメータのリストについては、標準の Alipay トランザクション サービス インターフェイス (フィッシング対策 Web サイト専用) を参照してください。 PDF の 3.2.2 データのセキュリティを確保するために、Alipay は現在、データの改ざんを防ぐためにこれらのパラメーターをそのまま送信する必要があるわけではないことに注意してください。
データを送信する前に、特定のルールに従って送信するデータを文字列に組み立て(インターフェイスドキュメントを参照)、セキュリティチェックコード(キー)を追加して新しい文字列を形成し、32 -MD5 署名によるバイト文字列。支払いリクエストを送信するときにこの署名も送信する必要があります。フォームのソースコードを見てください
パラメータを受け取った後、Alipayはリクエストパラメータの正当性を検証します。検証後、支払いページが表示されます。そうでない場合はエラーが表示されます。プロンプトが表示されます。
3.2.2 支払い通知の確認方法
ユーザーの支払いが完了すると、Alipay はウェブサイトの支払い通知アドレスをリクエストします (このアドレスは、支払いリクエストの作成時にパラメータとして渡す必要があります)。戻りパラメータのリストについては、標準の Alipay トランザクション サービス インターフェイス (フィッシング対策 Web サイト専用) を参照してください。 Pdf3.3.1. Alipay の返信データにも署名文字列があります (支払い要求と同じ署名方法を使用)。最初にデータに署名して検証する必要があります。署名の検証に加えて、通知の信頼性を検証し、検証を通知するために、パラメータのnotify_idもAlipayの検証ゲートウェイAlipayシステムに送信する必要があります。 Alipay システムは、通知が独自に送信されたかどうかを判断し、文字列形式の場合は true を返し、それ以外の場合は、サーバーから返されたデータを検証することでリクエストの信頼性を検証します。注文データを変更し、ユーザーに通知やその他の操作を送信できます。署名の検証については、通知ファイル内のソース コードを参照してください。デモでは、パラメーターのnotify_idがPOSTを通じてAlipayに送信され、戻りデータが取得されます。 コードスニペット:
重要なポイントは、fsockopen関数です。この関数を使用してソケット接続を開くと、以前に学習したファイル ハンドル (fgets()、fgetss() が返されます。 )、fputs()、fclose() feof () など) を使用して、コード内で fputs() (fwrite() と同じ) 関数を使用して、POST モードでデータを送信するフォームをシミュレートするデータを書き込みます。最後に、返されたデータが fgets() 関数を通じて取得され、配列に保存され、最終的に検証されます。詳細については、ソース コードを参照してください。
以上がPHP が Alipay 支払いプロセスを実装する方法の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。