ホームページ >PHPフレームワーク >ThinkPHP >Alipay および WeChat の支払い操作に ThinkPHP6 を使用するにはどうすればよいですか?

Alipay および WeChat の支払い操作に ThinkPHP6 を使用するにはどうすればよいですか?

PHPz
PHPzオリジナル
2023-06-12 09:46:013032ブラウズ

モバイルインターネットの急速な発展に伴い、電子決済は現代生活においてますます重要な役割を果たしています。 Alipay と WeChat Pay は、現代社会における主要な電子決済手段の 1 つとなっています。そこで、Web アプリケーションで Alipay と WeChat の支払いをスムーズに処理できるように、この記事では ThinkPHP 6 を使用して Alipay と WeChat の支払いを操作する方法を紹介します。

1. 関連するライブラリ ファイルを導入する

Alipay および WeChat の支払いに ThinkPHP6 を使用する前に、まず関連するライブラリ ファイルを導入する必要があります。ここでは、Composer がすでにインストールされていると仮定し、コンソールで次のコマンドを使用して関連するライブラリ ファイルをインストールします:

composer require alipay/easysdk
composer require wechatpay/ wechatpay
composer require guzzlehttp/guzzle

そのうち、alipay/easysdk は Alipay 開発キット、wechatpay/wechatpay は WeChat オープン プラットフォーム SDK、および guzzlehttp /guzzle は、HTTP リクエストを行うための API PHP ライブラリに使用されます。

2. Alipay 支払い操作

Alipay 支払いプロセスの主なプロセスは次のとおりです:

  1. 支払いが必要な注文情報を作成します;
  2. Alipay API を呼び出す 支払いリクエストを開始する;
  3. ユーザーは Alipay を通じて支払います;
  4. Alipay の支払い結果がマーチャント サーバーに通知されます。

次は、Alipay 支払いに ThinkPHP6 を使用する例です:

use AlipayEasySDKFactory;

class AlipayController extends Controller
{
    public function index()
    {
        $config = [
            'app_id' => 'your-app-id',
            'private_key' => 'your-private-key',
            'public_key' => 'your-public-key',
            'log' => [
                'file' => './alipay/easy.log',
                'level' => 'debug',
            ],
            'notify_url' => 'http://yourwebsite.com/notify',
            'return_url' => 'http://yourwebsite.com/return'
        ];
        
        $app = Factory::create('payment', $config);
        
        $order = [
            'out_trade_no' => date('YmdHis'),
            'total_amount' => 0.01,
            'subject' => 'test',
        ];
        
        $url = $app->order->page($order, 'http://yourwebsite.com/return');
        
        return $url;
    }
}

上記のコードでは、まず、Configured トランザクション インスタンスを作成する Alipay の EasySDK ファクトリ クラスを引用しました。次に、順序情報を含む順序配列を構築します。ここでは注文番号(out_trade_no)、注文金額(total_amount)、注文件名(subject)を設定します。次に、order メソッドを使用して支払いリクエストを開始し、最後に支払い URL をユーザーに返します。

支払いが完了すると、Alipay は販売者のサーバーに POST リクエストを送信します。このリクエストには支払い情報が含まれており、販売者の notify_url を呼び出します。コードでは、notify_url は販売者のサーバーのアドレスを指し、販売者に支払い結果を処理する機能を提供します。

3. WeChat 支払い操作

WeChat 支払いプロセスの主なプロセスは次のとおりです:

  1. WeChat サーバーから前払い注文情報をリクエストします;
  2. 取得WeChat サーバーから返された prepay_id は注文の署名を生成します (署名の順序は appid、mch_id、nonce_str、prepay_id、 trade_type、key であることに注意してください);
  3. クライアントが支払いリクエストを開始します;
  4. WeChat の支払い結果が加盟店サーバーに通知されます。

次は、WeChat 支払いに ThinkPHP6 を使用する例です:

use WechatPayGuzzleMiddlewareUtilPemUtil;
use WechatPayNotifyPaidNotify;
use WechatPayOpenAPIV3PayAppPayClient;
use WechatPayOpenAPIV3PayJsPayClient;

class WechatController extends Controller
{
    public function index()
    {
        $merchantId = 'your-mchid';
        $merchantSerialNumber = 'your-serial';
        $merchantPrivateKey = PemUtil::loadPrivateKey('./cert/apiclient_key.pem');
        $wechatpayCertificate = PemUtil::loadCertificate('./cert/wechatpay_certificate.pem');
        $apiV3Key = 'your-key';

        $client = new JsPayClient(
            $merchantId,
            $merchantSerialNumber,
            $merchantPrivateKey,
            $wechatpayCertificate,
            $apiV3Key
        );

        $params = [
            'body' => 'testbody',
            'out_trade_no' => date('YmdHis'),
            'app_id' => 'your-app-id',
            'notify_url' => 'http://yourwebsite.com/wechat_notify',
            'amount' => [
                'total' => 1,
            ],
            'description' => 'test_description',
        ];

        $result = $client->prepare($params);
        $prepayId = $result['prepay_id'];

        $appClient = new AppPayClient(
            $merchantId,
            $merchantSerialNumber,
            $merchantPrivateKey,
            $wechatpayCertificate,
            $apiV3Key
        );

        $packageParams = [
            'prepay_id' => $prepayId,
            'trade_type' => 'JSAPI',
            'timeStamp' => strval(time()),
            'nonceStr' => md5(bin2hex(openssl_random_pseudo_bytes(16))), 
        ];

        $packageParams['sign'] = $appClient->sign($packageParams);

        return json_encode($packageParams); 
    }
}

上記のコードでは、WeChat 支払いの GuzzleMiddleware ライブラリと WeChat 支払いオープン プラットフォームの SDK を導入しました。 。次に、販売者 ID、販売者シリアル番号、販売者秘密キー (mchid、シリアル、キー) を設定します。次に、支払い関連のパラメータを構築し、JsPayClient の prepare メソッドを使用して prepay_id を取得します。注文署名の生成順序は、appid、mch_id、nonce_str、prepay_id、trade_type、key に従う必要があることに注意してください。最後に、AppPayClient の signed メソッドを使用して署名を生成し、そのすべてのパラメーターを JSON でシリアル化し、ユーザーに返します。

支払いが完了すると、WeChat は販売者のサーバーに POST リクエストを送信します。このリクエストには支払い情報が含まれており、販売者の notify_url を呼び出します。コードでは、notify_url は販売者のサーバーのアドレスを指し、販売者に支払い結果を処理する機能を提供します。

要約すると、この記事では、Alipay と WeChat の支払い操作に ThinkPHP6 を使用する方法を紹介します。この記事は基本的な例のみを提供しているため、支払い結果と例外をより詳細に処理する必要があることに注意してください。問題が発生した場合は、Alipay や WeChat Pay の API ドキュメント、または GitHub などのプラットフォームの情報を参照してください。

以上がAlipay および WeChat の支払い操作に ThinkPHP6 を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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