>  기사  >  백엔드 개발  >  WeChat 결제 통합을 위해 PHP 및 OAuth를 사용하는 방법

WeChat 결제 통합을 위해 PHP 및 OAuth를 사용하는 방법

王林
王林원래의
2023-07-28 19:30:281540검색

PHP와 OAuth를 사용하여 WeChat 결제를 통합하는 방법

소개:
모바일 결제의 인기로 인해 WeChat 결제는 많은 사람들이 선호하는 결제 방법이 되었습니다. WeChat Pay를 웹사이트나 애플리케이션에 통합하면 사용자에게 편리한 결제 경험을 제공할 수 있습니다. 이 기사에서는 WeChat 결제 통합을 위해 PHP 및 OAuth를 사용하는 방법을 소개하고 관련 코드 예제를 제공합니다.

1. WeChat Pay 신청
WeChat Pay를 사용하기 전에 먼저 WeChat Pay 가맹점 계정 및 관련 키를 신청해야 합니다. 구체적인 신청 절차는 WeChat Pay 공식 문서를 참조하세요.

2. PHP OAuth 라이브러리 선택
OAuth는 사용자가 자신의 정보에 액세스할 수 있도록 타사 애플리케이션을 승인할 수 있는 개방형 인증 표준입니다. WeChat Pay에서는 사용자 인증 로그인 및 결제 과정에서 OAuth가 사용됩니다. PHP에는 OAuth1, OAuth2 등 선택할 수 있는 오픈 소스 OAuth 라이브러리가 많이 있습니다.

3. OAuth 라이브러리 설치 및 구성

  1. OAuth 라이브러리 다운로드 및 설치
    PHP에는 php-oauth2-client와 같이 선택할 수 있는 우수한 OAuth 라이브러리가 많이 있습니다. Composer를 통해 설치할 수 있습니다. 구체적인 설치 명령은 다음과 같습니다.
composer require thephpleague/oauth2-client
  1. Configure the OAuth library
    프로젝트에서 OAuth 라이브러리 구성을 위한 Config.php 파일을 생성해야 합니다. 이 파일에는 판매자 번호, 키 등과 같은 WeChat 결제 관련 구성 정보가 포함되어야 합니다. 샘플 코드는 다음과 같습니다.
<?php
class Config {
    public static $wechatPayConfig = [
        'clientId'          => 'YOUR_CLIENT_ID',
        'clientSecret'      => 'YOUR_CLIENT_SECRET',
        'redirectUri'       => 'YOUR_REDIRECT_URI',

        'wechatPayApiUrl'   => 'https://api.mch.weixin.qq.com/pay/unifiedorder',
        'wechatPayAppId'    => 'YOUR_APP_ID',
        'wechatPayMchId'    => 'YOUR_MCH_ID',
        'wechatPayApiKey'   => 'YOUR_API_KEY'
    ];
}
?>

4. WeChat 결제 통합을 위해 OAuth 사용

  1. 인증된 로그인
    WeChat 결제를 사용하기 전에 사용자는 먼저 로그인을 승인해야 합니다. 이는 다음 코드 예제를 통해 달성할 수 있습니다.
<?php
require 'vendor/autoload.php';
use LeagueOAuth2ClientProviderGenericProvider;

$provider = new GenericProvider([
    'clientId'                => Config::$wechatPayConfig['clientId'],
    'clientSecret'            => Config::$wechatPayConfig['clientSecret'],
    'redirectUri'             => Config::$wechatPayConfig['redirectUri'],
    'urlAuthorize'            => 'https://open.weixin.qq.com/connect/oauth2/authorize',
    'urlAccessToken'          => 'https://api.weixin.qq.com/sns/oauth2/access_token',
    'urlResourceOwnerDetails' => 'https://api.weixin.qq.com/sns/userinfo'
]);

// 获取授权码
if (!isset($_GET['code'])) {
    $authorizationUrl = $provider->getAuthorizationUrl();
    $_SESSION['oauth2state'] = $provider->getState();
    header('Location: ' . $authorizationUrl);
    exit();
}

try {
    $accessToken = $provider->getAccessToken('authorization_code', [
        'code' => $_GET['code']
    ]);

    $resourceOwner = $provider->getResourceOwner($accessToken);
    $openid = $resourceOwner->getValues()['openid'];

    // TODO: 将openid保存到数据库中
} catch (Exception $e) {
    // 错误处理
}
?>
  1. 결제 요청 시작
    사용자가 승인하고 로그인한 후 결제 요청을 시작할 수 있습니다. 이는 다음 코드 예시를 통해 달성할 수 있습니다.
<?php
require 'vendor/autoload.php';

$wechatPay = new WechatPay(Config::$wechatPayConfig);
$prepayInfo = $wechatPay->unifiedOrder([
    'body'             => '支付测试',
    'out_trade_no'     => time(),
    'total_fee'        => '1',
    'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
    'notify_url'       => 'http://www.example.com/notify.php',
    'trade_type'       => 'JSAPI',
    'openid'           => $openid
]);

$prepayParams = $wechatPay->getJSSDKParams($prepayInfo['prepay_id']);

// 将$prepayParams传递给前端进行支付
?>
  1. 결제 콜백 처리
    결제가 성공한 후 WeChat 서버는 지정된 notify_url을 콜백하여 결제 결과를 알립니다. 이는 다음 코드 예제를 통해 달성할 수 있습니다.
<?php
require 'vendor/autoload.php';
use WechatPayNotify;

$notify = new Notify(Config::$wechatPayConfig);
$notifyResult = $notify->handleNotify(); // 处理支付结果通知

if ($notifyResult) {
    // TODO: 更新数据库中的订单状态
    echo 'success'; // 返回给微信服务器,表示已成功处理通知
} else {
    // TODO: 删除数据库中的订单,或者进行其他处理
    echo 'fail';
}
?>

요약:
위 단계를 통해 PHP 및 OAuth 기반 WeChat 결제 기능을 구현할 수 있습니다. 먼저 OAuth를 통해 사용자 인증 로그인을 구현하고 사용자의 openid를 획득합니다. 그런 다음 openid 및 관련 매개변수를 사용하여 결제를 요청합니다. 마지막으로 결제 결과 알림에서는 결제 결과가 처리되고 관련 주문 상태가 업데이트됩니다. 이 방법을 통해 우리는 웹사이트나 애플리케이션에 WeChat 결제를 쉽게 통합할 수 있습니다.

위 내용은 이 글의 코드 예시입니다. PHP와 OAuth를 사용하여 WeChat 결제를 통합할 때 도움이 되길 바랍니다.

위 내용은 WeChat 결제 통합을 위해 PHP 및 OAuth를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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