>  기사  >  PHP 프레임워크  >  Alipay 및 WeChat 결제 작업에 ThinkPHP6를 사용하는 방법은 무엇입니까?

Alipay 및 WeChat 결제 작업에 ThinkPHP6를 사용하는 방법은 무엇입니까?

PHPz
PHPz원래의
2023-06-12 09:46:012984검색

모바일 인터넷의 급속한 발전과 함께 전자 결제는 현대 생활에서 점점 더 중요한 역할을 하고 있습니다. Alipay와 WeChat Pay는 현대 사회의 주요 전자 결제 수단 중 하나가 되었습니다. 따라서 웹 애플리케이션이 Alipay 및 WeChat 결제를 원활하게 처리하기 위해 이 기사에서는 Alipay 및 WeChat 결제 작업에 ThinkPHP 6을 사용하는 방법을 소개합니다.

1. 관련 라이브러리 파일 소개

ThinkPHP6를 Alipay 및 WeChat 결제에 사용하기 전에 먼저 관련 라이브러리 파일을 소개해야 합니다. 여기서는 Composer를 설치했다고 가정하고 콘솔에서 다음 명령을 사용하여 관련 라이브러리 파일을 설치합니다.

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

그중 alipay/easysdk는 Alipay 개발 키트이고 wechatpay/wechatpay는 WeChat 오픈 플랫폼 SDK입니다. , guzzlehttp/guzzle API에 HTTP 요청을 하기 위한 PHP 라이브러리입니다.

2. Alipay 결제 작업

Alipay 결제 프로세스의 주요 프로세스는 다음과 같습니다.

    결제해야 하는 주문 정보를 구성합니다.
  1. Alipay API를 호출하여 결제 요청을 시작합니다.
  2. Alipay 결제 결과 알림 가맹점 서버.
  3. 다음은 Alipay 결제에 ThinkPHP6을 사용하는 예입니다.
  4. 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;
        }
    }
  5. 위 코드에서 먼저 주어진 구성으로 트랜잭션 인스턴스를 생성하는 Alipay의 EasySDK 팩토리 클래스를 참조합니다. 그런 다음 주문 정보를 포함하는 주문 배열을 구성합니다. 여기서는 주문번호(out_trade_no), 주문금액(total_amount), 주문대상(subject)을 설정합니다. 다음으로 주문 방법을 사용하여 결제 요청을 시작하고 마지막으로 결제 URL을 사용자에게 반환합니다.

결제가 완료된 후 Alipay는 판매자 서버에 POST 요청을 보냅니다. 요청에는 일부 결제 정보가 포함되어 있으며 판매자의 inform_url을 호출합니다. 코드에서 inform_url은 판매자 서버의 주소를 가리키며 판매자가 결제 결과를 처리할 수 있는 기능을 제공합니다.

3. WeChat 결제 작업

WeChat 결제 프로세스의 주요 프로세스는 다음과 같습니다.

WeChat 서버에서 선불 주문 정보를 요청합니다.

WeChat 서버에서 반환된 prepay_id를 가져오고 주문 ​​서명을 생성합니다. 서명 순서는 appid, mch_id, nonce_str, prepay_id, trade_type, key 순서입니다.
  1. 클라이언트가 결제 요청을 시작합니다.
  2. WeChat 결제 결과가 판매자 서버에 통보됩니다.
  3. 다음은 위챗 결제에 ThinkPHP6을 사용한 예입니다.
  4. 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); 
        }
    }
  5. 위 코드에서는 위챗 결제의 GuzzleMiddleware 라이브러리와 위챗 결제 오픈 플랫폼의 SDK를 소개했습니다. 그런 다음 판매자 ID, 판매자 일련번호, 판매자 개인 키(mchid, 일련번호 및 키)를 설정합니다. 다음으로 결제 관련 파라미터를 구성하고 JsPayClient의 prepare 메소드를 사용하여 prepay_id를 획득합니다. 주문 서명 생성 순서는 appid, mch_id, nonce_str, prepay_id, trade_type 및 key를 따라야 합니다. 마지막으로 AppPayClient의 sign 메소드를 사용하여 서명을 생성하고 모든 매개변수를 JSON으로 직렬화한 후 사용자에게 반환합니다.

결제가 완료된 후 WeChat은 판매자 서버에 POST 요청을 보냅니다. 요청에는 일부 결제 정보가 포함되어 있으며 판매자의 inform_url을 호출합니다. 코드에서 inform_url은 판매자 서버의 주소를 가리키며 판매자가 결제 결과를 처리할 수 있는 기능을 제공합니다.

요약하자면, 이 글에서는 ThinkPHP6를 Alipay와 WeChat 결제 작업에 사용하는 방법을 소개합니다. 이 글은 기본적인 예시일 뿐이므로 결제 결과 및 예외 사항을 더 자세히 처리해야 한다는 점을 참고하시기 바랍니다. 문제가 발생하면 Alipay 및 WeChat Pay의 API 설명서 또는 GitHub와 같은 플랫폼 정보를 참조하세요.

위 내용은 Alipay 및 WeChat 결제 작업에 ThinkPHP6를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.