wordpress如何實現微信支付

發布: 2019-07-20 15:49:17
原創
8164 人瀏覽過

wordpress如何實現微信支付

對於呼叫微信支付,微信提供了 JS SDK 來幫助我們實現在微信裡面呼叫微信支付的功能。以下是具體的實現步驟,

第一步、安裝實現微信支付所需的包

我們依然使用Omnipay Wechat Pay這個包來幫助我們實現微信支付,其實和之前的原生掃碼支付方式是類似的,只不過使用的介面不同罷了。下面是我開發的微信網站中使用的函式庫。其中前兩者不用說了,很明顯是微信支付所用的 Omnipay 庫,Wordpress Dispatcher 是一個 WordPress Router 系統,用來實現自訂 URL,Valitron 主要用來驗證用戶提交資料。

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

執行composer install指令安裝完成後,在主題或外掛程式中引入自動載入檔案。

require_once( get_template_directory() . '/vendor/autoload.php' );
登入後複製

前端實作:設定微信JS SDK,並實作微信支付

這裡的jssdk.php 是微信官方提供的,用來實作為初始化微信JS SDK提供簽名包。在需要實作微信支付的頁面引入這個文件,然後初始化 JSSDK 類別即可。

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

初始化微信JS sdk, 呼叫微信支付方法實作微信支付

首先、確保在頁面的head 因為了微信JS SDK 的JavaScript 檔案:jweixin-1.0 .0.js。根據上面取得的 $signPackage,我們在下面程式碼中完成了以下幾個操作。

使用 wx.config 初始化 js sdk使用 wx.ready 偵測 js sdk 是否初始化成功,如果初始化成功,我們就可以使用微信 js sdk 提供的介面進行操作了。點選付款按鈕時,發送一個 Ajax 請求到伺服器,取得微信訂單,然後使用 wx.chooseWXPay 發起微信支付,就是我們在微信裡面看到的彈出輸入微信密碼的介面。

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 請求的回傳資料安全網域設定錯誤,檢查在微信管理後台中,是否把測試網域加入到了安全域名中

後端實作:驗證並發送訂單資料

#後端實作很簡單,就是接收上面Ajax 提交過來的數據,然後處理微信支付所需的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 );

   },] );
登入後複製

接受微信支付成功通知,實現自動完成訂單或自動充值

支付完成後,微信會返回一個支付成功的通知到我們提供的通知URL,我們可以根據返回的內容,進行自動完成訂單或自動儲值等操作。這裡有兩點要注意。

通知 URL 一定要能訪問,如果不能訪問,微信不會發送通知。要和支付URL在一個目錄下

微信官方提供的SDK 和接口數據非常不規範,在使用的時候一定要代碼中的注意大小寫,出現了問題,仔細和微信官方提供的開發文件相對照,如果你使用的語言或開發框架提供了微信開發所用到庫,建議直接使用這些庫進行開發,這些庫可以幫助我們繞過微信為我們挖下的各種大坑小坑,減少調試難度、加快開發速度。

更多wordpress相關技術文章,請造訪wordpress教學欄位進行學習!

以上是wordpress如何實現微信支付的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板