1. 程式人生 > >thinkphp5 的微信支付整合

thinkphp5 的微信支付整合

下載地址:連結: https://pan.baidu.com/s/1eRUkvtC 密碼: eu98

原作者的:連結: https://pan.baidu.com/s/1dFyE4t7 密碼: s9a7

下載後直接解壓至extend目錄下

然後去公共函式庫common寫一個函式:

//微信支付函式
function wxpay($body,$total_fee,$out_trade_no){
    //傳入支付引數
    //$out_trade_no = date('Ymd').time().mt_rand();
    $params = [
        'body' => $body,
        'out_trade_no' => $out_trade_no,
        'total_fee' => $total_fee,
        'product_id' => $out_trade_no,
        'notify_url' => 'http://'.$_SERVER['HTTP_HOST'].'/index/user/notifyPay',
    ];
    $result = \wxpay\NativePay::getPayImage($params,300,300);
    return $result;
}

這個$result返回的是一個封裝好的img標籤包含處理好的二維碼

在這裡貼出上面使用的getPayIamge方法

<?php

namespace wxpay;

use think\Loader;

Loader::import('wxpay.lib.WxPayNativePay');

/**
* 掃碼支付
*
* 用法:
* 呼叫 \wxpay\NativePay::getPayImage($params) 即可
*
*/
class NativePay extends WxPayBase
{
    /**
     * 獲取掃碼支付的二維碼圖片
     *
     * @param array  $params 訂單資訊
     * @param string $params['body'] 商品簡單描述
     * @param string $params['out_trade_no'] 商戶訂單號, 要保證唯一性
     * @param string $params['total_fee'] 標價金額, 請注意, 單位為分!!!!!
     * @param string $params['product_id'] 商品ID
     *
     * @param string $width 二維碼寬
     * @param string $height 二維碼長
     *
     * @return string img標籤
     */
    public static function getPayImage($params, $width=250, $height=250)
    {
        // 1.校檢引數
        $that = new self();
        $that->checkParams($params);
        if(empty($params['product_id'])) {
            throw new \WxPayException('商品ID(product_id)商品ID必須');
        }

        // 2.組裝引數
        $input = $that->getPostData($params);

        // 3.進行請求
        $tools = new \WxPayNativePay();
        $result = $tools->GetPayUrl($input);

        // 4.進行結果檢驗
        $that->checkResult($result);

        // 5.返回支付二維碼圖片
        $url = urlencode($result["code_url"]);
        $payImage = "<img alt='掃碼支付' src='http://paysdk.weixin.qq.com/example/qrcode.php?data={$url}' style='width:{$width}px;height:{$height}px;'/>";
        return $payImage;
    }

    // 組裝請求引數
    private function getPostData($params)
    {
        $input  = new \WxPayUnifiedOrder();
        $input->SetBody($params['body']);
        $input->SetOut_trade_no($params['out_trade_no']);
        $input->SetTotal_fee($params['total_fee']);
        // $input->SetGoods_tag("test");
        $input->SetNotify_url($params['notify_url']);
        $input->SetTrade_type("NATIVE");
        $input->SetProduct_id($params['product_id']);
        return $input;
    }
}

非同步查詢控制方法,是利用js'的ajax方法請求

//ajax實時請求微信支付結果
    public function notifypay($out_trade_no)
    {
        $result = \wxpay\Query::exec($out_trade_no);
        if($result['trade_state'] == 'SUCCESS'){
            return 1;
        }else{
            return 0;
        }
    }
在這裡依然貼出上面呼叫的Query方法
<?php

namespace wxpay;

use think\Loader;

require_once 'lib/WxPayException.php';
Loader::import('wxpay.lib.WxPayApi');

/**
* 訂單查詢
*
* 用法:
* 呼叫 \wxpay\Query::exec($query_no) 即可
*
*/
class Query
{
    // 商戶訂單號(out_trade_no) or 微信訂單號(transaction_id) 二選一, 建議優先使用微信訂單號
    const QUERY_TYPE = 'out_trade_no';

    /**
     * 執行請求
     *
     * @param  string $query_no 微信訂單號或者商戶訂單號, 二選一
     * @return array           訂單資訊
     */
    public static function exec($query_no)
    {
        // 1.組裝請求陣列
        $input = new \WxPayOrderQuery();

        if (self::QUERY_TYPE == 'transaction_id') {
            $input->SetTransaction_id($query_no);
        } else {
            $input->SetOut_trade_no($query_no);
        }

        // 2.進行請求
        $result = \WxPayApi::orderQuery($input);
        return $result;
    }
}
在這裡貼出處理訂單的判斷及方法
    //如果支付成功,跳轉頁面,開始處理訂單狀態
    public function doorder($oid)
    {
        //通過訂單號向微信查詢改訂單狀態資料集
        $data = \wxpay\Query::exec($oid);
        if(!array_key_exists("transaction_id", $data)){
            $this->success('不存在的訂單號','commend/commendStore');
        }
        //獲取該訂單號資料
        $order = OrderModel::get(['oid'=>$oid]);

        if(!$order->oid) {
            $this->success('不存在的訂單號','commend/commendStore');
        }

         if($order->status == 2){
             $this->success('訂單已經被處理過','commend/commendStore');
         }
        //獲取訂單號中優惠卡的資料
        $card = Card::get($order->card_id);
        //獲取平臺財務資料
        $m = Finance::get(1);
        //設定分潤,earn為平臺提成,money為平臺剩餘商戶餘額
        $earn = $card->promotion_price * ($m->commission / 100);
        $money = $card->promotion_price - $earn;
        //保持小數點後兩位,累加到平臺餘額
        $m->money = $m->money + round($money,2);
        $m->earn = $m->earn + round($earn,2);
        // 啟動事務
        Db::startTrans();
        try{
            //修改訂單狀態和儲存平臺財務資料
            OrderModel::where('oid',$oid)->update(['status'=>2]);
            $m->save();
            // 提交事務
            Db::commit();
        } catch (\Exception $e) {
            // 回滾事務
            Db::rollback();
            $this->success('訂單處理失敗,請聯絡運營方','commend/commendStore');
        }

        $this->success('付款成功','commend/commendStore');

    }

在最後貼出掃描二維碼頁面的js

    $(function(){
        setInterval(function(){check()} , 10000);  //每隔三秒執行一次 ajax
        function check(){
            var out_trade_no = $('#oid').html();
            $.ajax({
                type: "post",
                url: '{:url("store/order/notifypay")}',  //請求函式
                async: false,
                data: {'out_trade_no':out_trade_no},
                dataType: "json",
                success: function (data) {
                    if (data == 1) {
                        location.href="/store/order/doorder/oid/"+out_trade_no;
                    }else{
                        result = false;
                    }
                }
            });
        }
    })


相關推薦

thinkphp5支付整合

下載地址:連結: https://pan.baidu.com/s/1eRUkvtC 密碼: eu98 原作者的:連結: https://pan.baidu.com/s/1dFyE4t7 密碼: s9a7 下載後直接解壓至extend目錄下 然後去公共函式庫common寫一個

ThinkPHP5支付擴展庫(超級簡單, 超級超好用!)

微信支付 thinkphp5 ThinkPHP5 微信支付擴展庫(2017年9月24日)歡迎到Github查看最新代碼https://github.com/dream2023/ThinkPHP5-wxpay掃碼支付調用\wxpay\NativePay::getPayImage($params)即可小程

React Native (IOS和Android) 支付寶和支付整合實戰(支付寶Android篇)

序言:React Native無論是在社群和應用程度上,在國內外是十分廣泛和普及的。而支付寶和微信在支付模組上都有或多或少的支援,雖然沒有完整的Demo,不過在我做過一個相關整合的專案後,在此我把相關的步驟和方法總結出來和大家分享,希望能夠幫助大家少走彎路,快速整合。 支付

.NET支付整合例項

轉自https://blog.csdn.net/u013385913/article/details/46509631 微信端HTML頁面下單事件: document.getElementById('btn-wxpay')addEventListener('tap', function (e

React Native (IOS和Android) 支付寶和支付整合實戰(IOS篇)

序言:React Native無論是在社群和應用程度上,在國內外是十分廣泛和普及的。而支付寶和微信在支付模組上都有或多或少的支援,雖然沒有完整的Demo,不過在我做過一個相關整合的專案後,在此我把相關的步驟和方法總結出來和大家分享,希望能夠幫助大家少走彎路,快速整合。 微信

Spring Boot入門教程(四十):支付整合-刷卡支付

一:準備工作 使用微信支付需要先開通服務號,然後還要開通微信支付,最後還要配置一些開發引數,過程比較多。 二:支付方式 刷卡支付(MICROPAY) :刷卡支付是使用者展示微信錢包內的“刷卡條碼/二維碼”給商戶系統掃描後直接完成支付的模式。主要應

ThinkPHP5支付擴充套件庫(超級簡單, 超級超好用!)

ThinkPHP5微信支付最新擴充套件庫(2017年9月24日). 我的想法很簡單,就是隻需要呼叫一個靜態方法就可以完成支付,查詢,退款,查賬等等, 無需重複造輪子, 專注自己業務!歡迎到Github檢視最新程式碼https://github.com/dream2023/T

Android學習之 移動應用支付整合小結

       微信支付現在主要整合在:1、移動應用開發  2、網站應用開發  3、公眾賬號開發        本篇主要針對移動應用App整合微信支付,實際專案坑點分享! 一、既予之、與共之:平臺資源 3、微信支付指引和資源中心:微信支付接入指南和資源下載中心<強

Android支付整合和踩過的坑

近公司需要微信支付,所以不得不去看看微信支付文件。但是你懂得,那文件寫的真帶勁,看不懂。我直接放棄,開始整合。但是調起微信支付的時候:結果碼為-1,心裡一驚,肯定哪裡錯了,就開始找坑。所以把自己解決的過程分享給大家,讓整合微信支付成為很容易的一件事。 2、我們需要的資源

iOS 支付整合

1. 準備微信平臺分為微信公眾平臺和微信開放平臺,公眾平臺是運營微信公眾號的管理系統,開放平臺主要針對app、網站開發,提供登入、分享、支付等功能。註冊開放平臺之後,新建應用,填寫應用資訊(Android、iOS等資訊),建立之後需要等待稽核(這個稽核很快的,幾個小時就通過了

Android 支付寶和支付整合

場景 隨著移動支付的興起,在我們的app中,會經常有整合支付的需求.這時候一般都會採用微信和支付寶的sdk 來整合 支付寶支付 在使用支付寶支付的過程中,我們是在伺服器端生成訂單,客戶端訪問介面,得到訂單資訊.然後調起支付,支付成功後支付寶會分別 非同步呼叫伺服器端

Android 支付整合重點(已經看過官方開發文件)

整合微信支付重點,適用於有整合經驗並且已經看過開發文件的同學 1.申請開通 按照官方文件步驟 (註冊平臺賬號——認證(300 如果失敗3次需再付300認證,資訊提前確認)——建立應用稽核(簽名用微信的提取工具)——開通支付功能——整合) 2.整合

React Native (IOS和Android) 支付寶和支付整合實戰(支付服務端篇)

序言:React Native無論是在社群和應用程度上,在國內外是十分廣泛和普及的。而支付寶和微信在支付模組上都有或多或少的支援,雖然沒有完整的Demo,不過在我做過一個相關整合的專案後,在此我把相關的步驟和方法總結出來和大家分享,希望能夠幫助大家少走彎路,快速整合。 微信

基於HTML5之APP支付整合實現(轉載)

一 摘要商戶系統和微信支付系統主要互動說明:步驟1:使用者在商戶APP中選擇商品,提交訂單,選擇微信支付。 步驟2:商戶後臺收到使用者支付單,呼叫微信支付統一下單介面。參見統一下單API。 步驟3:統一下單介面返回正常的prepay_id,再按簽名規範重新生成簽名後,將資料傳

第三方整合---支付整合與使用

先來一波微信支付的流程圖 商戶系統和微信支付系統主要互動說明: 步驟1:使用者在商戶APP中選擇商品,提交訂單,選擇微信支付。 步驟2:商戶後臺收到使用者支付單,呼叫微信支付統一下單介面。 步驟3:統一下單介面返回正常的prepay_id,再按簽名規範重新生成簽名

React Native (IOS和Android) 支付寶和支付整合實戰(支付寶服務端篇)

序言:React Native無論是在社群和應用程度上,在國內外是十分廣泛和普及的。而支付寶和微信在支付模組上都有或多或少的支援,雖然沒有完整的Demo,不過在我做過一個相關整合的專案後,在此我把相關的步驟和方法總結出來和大家分享,希望能夠幫助大家少走彎路,快速整合。 支

Android支付整合流程及其常見錯誤

[支付寶整合傳送門:http://blog.csdn.net/hx7013/article/details/61476320] 一、你需要關心的東西 1.申請與認證 2.上傳金鑰(商戶KEY),包名和簽名的修改 3.服務端整合 4

ThinkPHP5掃碼支付

values ade oca location ood 二維碼 隱藏 目的 tint 1.把微信官網下載的demo放在根目錄/vendor/目錄下,這裏我的是/vendor/wxpay_pc目錄 2.把cert裏面的文件替換成自己項目的證書(登陸微信商戶平臺,賬戶中心,

java實現沙箱測試環境支付支付(demo)和整合支付支付支付到ssm

mar 文件 fun Go examples IT === throws 由於 文章有不當之處,歡迎指正,如果喜歡微信閱讀,你也可以關註我的微信公眾號:好好學java,獲取優質學習資源。 一、支付寶測試環境代碼測試 1.下載電腦網站的官方demo: 下載地址:https:

Androd整合支付支付支付

文章目錄 前言 微信支付 支付寶支付 前言 我們在做App的時候,可能需要接入支付功能,常見的支付有微信支付和支付寶支付。這裡只說明下前端的程式碼邏輯。 微信支付 微信支付開發