>  기사  >  CMS 튜토리얼  >  WordPress에서 WeChat 결제를 구현하는 방법

WordPress에서 WeChat 결제를 구현하는 방법

尚
원래의
2019-07-15 14:35:058088검색

WordPress에서 WeChat 결제를 구현하는 방법

WeChat에서는 WeChat 결제 호출을 위해 JS SDK를 제공하여 WeChat에서 WeChat 결제 호출 기능을 구현하는 데 도움을 줍니다. 구체적인 구현 단계는 다음과 같습니다.

첫 번째 단계는 WeChat 결제를 구현하는 데 필요한 패키지를 설치하는 것입니다.

우리는 여전히 Omnipay Wechat을 사용합니다. Pay Bao Lai는 WeChat 결제를 구현하는 데 도움을 줍니다. 실제로 이전 기본 스캔 코드 결제 방법과 유사하지만 사용되는 인터페이스가 다릅니다. 다음은 제가 개발한 WeChat 웹사이트에서 사용된 라이브러리입니다. 말할 필요도 없이 처음 두 개는 WeChat 결제에 사용되는 Omnipay 라이브러리입니다. WordPress Dispatcher는 사용자 정의 URL을 구현하는 데 사용되는 WordPress 라우터 시스템입니다. Valitron은 주로 사용자가 제출한 데이터를 확인하는 데 사용됩니다.

"require": {
    "omnipay/omnipay": "~2.0",
    "lokielse/omnipay-wechatpay": "^1.0",
    "thefold/wordpress-dispatcher": "^1.0",
    "vlucas/valitron": "^1.2",
    },

작성기 설치 명령을 실행하세요. 설치가 완료되면 자동 로딩 파일을 테마나 플러그인에 추가하세요.

require_once( get_template_directory() . '/vendor/autoload.php' );

프런트 엔드 구현: WeChat JS SDK 구성 및 WeChat 결제 구현

여기에 있는 jssdk.php는 WeChat 공식에서 제공하며 다음과 같습니다. WeChat JS SDK 초기화를 위한 서명 패키지를 제공하기 위해 구현되었습니다. 위챗 결제를 구현해야 하는 페이지에 이 파일을 삽입한 후 JSSDK 클래스를 초기화합니다.

require_once( get_template_directory() . '/inc/jssdk.php' );
$jssdk       = new JSSDK( "xxxxx", "xxxxxxxxxxxxxxxx" );
$signPackage = $jssdk->GetSignPackage();

WeChat JS SDK 초기화, WeChat 결제 수단을 호출하여 WeChat 결제 구현

우선 WeChat JS SDK가 페이지 JavaScript 파일 jweixin-1.0.0.js의 헤드에 있습니다. 위에서 얻은 $signPackage를 기반으로 아래 코드에서 다음 작업을 완료했습니다.

wx.config를 사용하여 js SDK를 초기화하고 wx.ready를 사용하여 js SDK가 성공적으로 초기화되었는지 확인하면 WeChat js SDK에서 제공하는 인터페이스를 사용하여 작동할 수 있습니다. 결제 버튼을 클릭하면 Ajax 요청이 서버로 전송되어 WeChat 주문을 받은 다음 wx.chooseWXPay를 사용하여 WeChat 비밀번호를 입력하기 위해 WeChat에서 볼 수 있는 팝업 인터페이스인 WeChat 결제를 시작합니다.

jQuery(document).ready(function ($) {
    
   // 配置 js sdk
   wx.config({
      debug: false,
      appId: &#39;<?php echo $signPackage[ "appId" ];?>&#39;,
      timestamp: <?php echo $signPackage[ "timestamp" ];?>,
      nonceStr: &#39;<?php echo $signPackage[ "nonceStr" ];?>&#39;,
      signature: &#39;<?php echo $signPackage[ "signature" ];?>&#39;,
      jsApiList: [&#39;chooseWXPay&#39;]
      // 这里的 jsApiList 需要什么就填写什么
   });

   // 一定要检查 js sdk 是否已经准备好了
   wx.ready(function () {
      $("#topay").click(function () {
         $.ajax({
            url: &#39;/order/&#39;,
            type: &#39;POST&#39;,
            dataType: &#39;json&#39;,
            data: $("#wepay").serialize(),
            success: function (order) {
               var params = {
                  &#39;timestamp&#39;: order.timeStamp,
                  &#39;nonceStr&#39;: order.nonceStr,
                  &#39;package&#39;: order.package,
                  &#39;signType&#39;: order.signType,
                  &#39;paySign&#39;: order.paySign               };
               wx.chooseWXPay(params);
            },
            error: function (order) {
               c-alert(order.message);
            }
         });
         return false;
      });
   });});

다음 상황에서는 결제창이 깜박였다가 사라집니다

위챗에서 위챗 결제를 테스트하다 보면 위챗 결제가 자주 발생합니다 창이 깜박입니다 가 사라지며, 결제 비밀번호 입력 인터페이스가 보이지 않는 경우, 가능한 이유는 다음과 같으니 주의 깊게 확인해 주시기 바랍니다.

jssdk가 구성되지 않았습니다. 위 코드에서 wx.config 및 wx.readyAjax가 반환한 데이터가 잘못된지 확인하세요. Ajax 요청의 반환 데이터에 잘못된 도메인 이름 보안 설정이 있는지 확인하세요. WeChat 관리 백그라운드에서 보안 도메인 이름이 올바르게 설정되었는지 확인하십시오. 테스트 도메인 이름이 보안 도메인 이름에 추가되었습니다

백엔드 구현: 주문 데이터 확인 및 전송 # 🎜🎜#

백엔드 구현은 매우 간단합니다. 위의 Ajax를 받기만 하면 됩니다. 제출된 데이터는 WeChat 결제에 필요한 Json 데이터에 대해 처리되고 주문은 사이트 데이터베이스에 저장됩니다. 후속 쿼리 및 후속 알림 콜백.

// 获取微信支付网关的函数function get_wechat_gateway() {
   $gateway = Omnipay::create( &#39;WechatPay_Js&#39; );
   $gateway->setAppId( &#39; xxxxxxxx&#39; );
   $gateway->setMchId( &#39;xxxxxxxx&#39; );
   $gateway->setApiKey( &#39;xxxxxxxx&#39; ); //注意这里的 ApiKey 是我们在微信商户后台设置的一个32位的随机字符串,和微信公众号里面的 App Secrit 不是一回事。

   return $gateway;}/**
 * 处理订单信息, 跳转到微信支付
 */new Dispatch( [

   &#39;wepay/order&#39; => function ( $request ) {

      // 检查用户提交的数据是否有错,如果有错误,返回错误信息
      $v = new Validator( $_POST );
      $v->rule( &#39;required&#39;, [ &#39;count&#39;, &#39;buyer_name&#39;, &#39;buyer_phone&#39;, &#39;buyer_address&#39; ] );

      if ( ! $v->validate() ) {
         $msg = [
            &#39;success&#39; => &#39;0&#39;,
            &#39;message&#39; => &#39;下单失败, 请检查所有必填项。&#39;,
         ];
         wp_send_json( $msg );
      }

      $user = wp_get_current_user();
      $req = Request::createFromGlobals();
      $pid     = $req->get( &#39;pid&#39; );
      $count   = $req->get( &#39;count&#39; );
      $open_id = $req->cookies->get( &#39;open_id&#39; );
      $prod  = get_post( $pid );
      $price = get_post_meta( $pid, &#39;_prod_price&#39;, true );
      $total_fee = $price * $count * 100;
      $tn        = date( &#39;YmdHis&#39; ) . mt_rand( 1000, 9999 );

      // 在实际开发过程中,我们需要把用户提交的订单数据保存到数据库一份
      // 订单参数
      $order = [
         &#39;body&#39;             => $prod->post_title&#39;,
         &#39;out_trade_no&#39;     => $tn,
         &#39;total_fee&#39;        => $total_fee,
         &#39;spbill_create_ip&#39; => wizhi_get_real_ip(),
         &#39;fee_type&#39;         => &#39;CNY&#39;,
         &#39;open_id&#39;          => $open_id,
      ];
      // 发送支付请求到微信并获取返回信息
      $gateway = get_wechat_gateway();
      $gateway->setNotifyUrl( &#39;https://www.wpzhiku.com/order/return&#39; );
      $response = $gateway->purchase( $order )->send();
      $wechat_return = $response->getJsOrderData();

      wp_send_json( $wechat_return );

   },] );

WeChat 결제 성공 알림을 수락하면 자동으로 주문이 완료되거나 자동으로 충전됩니다.

결제가 완료되면 WeChat에서 제공한 알림 URL로 결제 성공 알림이 전송됩니다. 자동으로 주문을 완료하거나 반환된 콘텐츠에 따라 자동으로 충전할 수 있습니다. 여기서 주목해야 할 두 가지 사항이 있습니다.

알림 URL에 액세스할 수 있어야 합니다. 액세스할 수 없는 경우 WeChat은 알림을 보내지 않습니다. 결제 URL

과 동일한 디렉토리에 있어야 합니다. 위챗 공식에서 제공하는 SDK 및 인터페이스 데이터는 매우 비표준적이므로 코드의 대문자 사용에 주의해야 합니다. 문제가 있는 경우, 제공된 WeChat 공식 담당자에게 문의하시기 바랍니다. 개발 문서와 비교하여, 귀하가 사용하는 언어 또는 개발 프레임워크가 WeChat 개발에 사용되는 라이브러리를 제공하는 경우 이러한 라이브러리를 개발에 직접 사용하는 것이 좋습니다. WeChat이 우리를 위해 파놓은 크고 작은 다양한 구덩이를 통해 디버깅의 어려움을 줄이고 개발 속도를 높일 수 있습니다.

더 많은 WordPress 관련 기술 기사를 보려면

wordpress tutorial 열을 방문하여 알아보세요!

위 내용은 WordPress에서 WeChat 결제를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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