1. 程式人生 > >easywechat之微信支付--在thinkPHP5中的使用

easywechat之微信支付--在thinkPHP5中的使用

1.2 確定支付相關的配置引數已經配置好

複製程式碼

<?php

return [
    /**
     * Debug 模式,bool 值:true/false
     *
     * 當值為 false 時,所有的日誌都不會記錄
     */
    'debug'  => true,
    /**
     * 賬號基本資訊,請從微信公眾平臺/開放平臺獲取
     */
    'app_id'  => '',         // AppID
    'secret'  => '',     // AppSecret
    'token'   => '',          // Token
    'aes_key' => '',                    // EncodingAESKey,安全模式下請一定要填寫!!!
    /**
     * 日誌配置
     *
     * level: 日誌級別, 可選為:
     *         debug/info/notice/warning/error/critical/alert/emergency
     * permission:日誌檔案許可權(可選),預設為null(若為null值,monolog會取0644)
     * file:日誌檔案位置(絕對路徑!!!),要求可寫許可權
     */
    'log' => [
        'level'      => 'debug',
        'permission' =>  0777,
        'file'       =>  LOG_PATH.'easywechat.log',
    ],
    /**
     * OAuth 配置
     *
     * scopes:公眾平臺(snsapi_userinfo / snsapi_base),開放平臺:snsapi_login
     * callback:OAuth授權完成後的回撥頁地址
     */
    'oauth' => [
        'scopes'   => ['snsapi_userinfo'],
        'callback' => 'home/oauthallback',
    ],
    /**
     * 微信支付
     */
    'payment' => [
        'merchant_id'        => '', // 商戶號
        'key'                => '',
        'cert_path'          => '', // XXX: 絕對路徑!!!!(前往微信公眾平臺上下載)
        'key_path'           => '',      // 同上
        // 'device_info'     => '',
        // 'sub_app_id'      => '',
        // 'sub_merchant_id' => '',
        // ...
    ],
    /**
     * Guzzle 全域性設定
     *
     * 更多請參考: http://docs.guzzlephp.org/en/latest/request-options.html
     */
    'guzzle' => [
        'timeout' => 3.0, // 超時時間(秒)
        'verify' => true
    ]
];

複製程式碼

2. 支付操作

2.1 新增訂單

wechat1.php

複製程式碼

<?php
/**
 * ======================================
 *
 * Created by Super Demon W.
 * Author: \/Lin\/ [email protected]
 * Date: 2018/2/22
 * Time: 17:09
 *
 * =======================================
 */
namespace app\home\logic;

use think\Model;
use EasyWeChat\Foundation\Application;
use EasyWeChat\payment\Order;
use think\Config;

class Wechat1 extends Model {
    /**
     * 支付準備
     * @param $data
     * @param $openid
     * @return array
     */
    public function WeixinPrePay($data, $openid) {
        $options = Config::get('wechat');
        $app = new Application($options);
        $payment = $app->payment;
        $attributes = [
            'body' => '***-充值',
            'out_trade_no' => $data['order_sn'],
            'total_fee' => $data['money']*100,
            #'spbill_create_ip' => '***',
            'notify_url' => url('**/notify'), // 回撥地址
            'trade_type' => 'JSAPI',
            'openid' => $openid,
        ];

        $order = new Order($attributes);
        $result = $payment->prepare($order);
        if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS') {
            $prepayId = $result->prepay_id;
            $json = $payment->configForPayment($prepayId);
            return ['status' => 200, 'msg' => '', 'data' => $json];
        } else {
            return ['status' => 400, 'msg' => '調起支付失敗,請稍後嘗試'];
        }
    }
}

複製程式碼

2.2 新增訂單後調起支付

towxpay.php

複製程式碼

namespace app\home\controller;
use app\home\logic\Wechat1;
use think\Session;
use think\Db;

public function towxpay() {
        $uid = Session::get('user_auth')['uid'];
        $money = input('recharge_money', '');
        $wechat = new Wechat1();
        $order_sn = MakeOrderSn(); // 設定訂單號
        # 新增訂單
        $data = array(
                // ...yourdata
        );
        $order_id = db('order')->insertGetId($data);
        if (!$order_id) {
            $this->error('訂單新增失敗');
        }
        $openid = db('member')->where('uid', $uid)->value('openid');
        $check = $wechat->WeixinPrePay($data, $openid);
        if ($check['status'] == 400) {
             $this->error($check['msg']);
        }
        session::set('zejc_order_id', $order_id);
        $this->assign('jsonData', $check['data']);
        return $this->fetch();  
    }

複製程式碼

2.3 調取支付頁面

 towxpay.html

複製程式碼

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <title>發起支付-支付</title>
    <script type="text/javascript">
        //呼叫微信JS api 支付
        function jsApiCall()
        {
            WeixinJSBridge.invoke(
                'getBrandWCPayRequest',{$jsonData},
                function(res){
                    if (res.err_msg == "get_brand_wcpay_request:ok") { // 支付成功
                        location.href = '***?type=success';
                    }
                    if(res.err_msg == "get_brand_wcpay_request:fail") { // 支付失敗
                        location.href = '***?type=fail';
                    }
                    if (res.err_msg == "get_brand_wcpay_request:cancel") { // 取消支付
                        location.href = '***?type=cancel';
                    }
                }
            );
        }

        function callpay()
        {
            if (typeof WeixinJSBridge == "undefined"){
                if( document.addEventListener ){
                    document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
                }else if (document.attachEvent){
                    document.attachEvent('WeixinJSBridgeReady', jsApiCall);
                    document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
                }
            }else{
                jsApiCall();
            }
        }
        callpay();
    </script>
</head>
<body>
<div align="center" style="color: #00a157; margin-top: 20%">
    支付中...
</div>
</body>
</html>

複製程式碼

 注: 統一下單後返回prepay_id後要呼叫小程式支付函式,有最重要的一步,是需要再次簽名的,用統一下單返回的sign(簽名)是沒有用的。

================== 至此,微信支付結束 ===============

相關推薦

easywechat支付--在thinkPHP5的使用

1.2 確定支付相關的配置引數已經配置好 <?php return [ /** * Debug 模式,bool 值:true/false * * 當值為 false 時,所有的日誌都不會記錄 */ 'deb

PHP開發公眾號進行支付支付

想必很多人都有過要在微信公眾號中進行支付寶支付的經歷,但是微信又遮蔽了阿里系所有的東西,網上百度了很多,都沒有完整的解決方案,可謂萬坑叢中過啊。剛剛踩完坑的袁小威就迫不及待的分享給大家咯。 切入正題,其實支付寶官方就微信公眾號中使用支付寶支付是

支付開發填坑記支付

wiki index 傳輸 系統 外網 ttr throw div union 微信支付,支持的支付方式比較多:有掃碼支付,刷卡支付,APP支付和公眾號支付。其中,APP和網站上最常用的就是APP支付和公眾號支付。前者集成在APP中,後者主要是為微信用戶提供了另一種支付方式

公眾號支付

apple 論壇 最好 pps 插入 制造 返回 *** 異常 感覺很多程序都是只要一有關錢這一方面,我磨磨唧唧,文檔也寫的簡直了! 前排提示:微信文檔坑很多,在沒有前輩或者有經驗的情況下,千萬不要死懟代碼,一個人思考,最好遇到問題直接去找微信客服,發郵箱就發郵箱嘛

react支付

cti 最新 oca 客戶 gen let getconf 設置 pushstate 微信SDK官方文檔地址:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%BE%AE%E4%BF%A1JS-SDK%E6%8E%A5%

spring boot項目支付功能實現詳細介紹

tab 流程 invalid body 正方形 無法 數據 fmt -s 對接微信支付功能主要有以下幾個步驟, 而其第一個關鍵點就是獲取OpenID,在這裏介紹兩種獲取方式: 一、微信授權 微信網頁授權 如果用戶在微信客戶端中訪問第三方網頁,公

php 開發 支付 v3 配置

      公司需要微信支付現不到鎮的是非常的麻煩。然後呢那個要怎麼申請我就不寫了。因為不是我負責的所以我就記錄微信支付開發就好了。自己也記錄一下以後要開發好下手 。 1. 到這裡下載sdk        版本本V3 : http

小程式支付C#後臺(統一下單)

#region 生成簽名 /// <summary> /// 獲取簽名資料 ///</summary> /// <param name="strParam"></param> /// <param name="key"></par

小程式踩坑支付提示商戶未開通支付許可權

繼上次踩坑事件後 我們現在API祕藥都是採用數字+小寫字母 後面不多久公司就成為了微信服務商 工作起來 效率提高不少 然鵝我今天又踩了一個坑 給客戶開通了微信支付客戶不給賬號給我登入 拿不到裡面的一些資料 和APPID授權啥的 都是指導客戶開通 這些弄完之後 測試小程式支付

JAVA 支付過程支付驗證簽名失敗。

       如果提示支付驗證簽名失敗,立馬進入這裡:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1  用官方提供的驗籤工具去檢查你的簽名是否和伺服器的一樣,如果不一樣,就一

JAVA支付渠道列舉WechatPayChannelEnum

問題背景 微信支付成功之後有一個<bank_type><![CDATA[CFT]]></bank_type>的支付渠道型別,那麼針對這個渠道型別,我們有時候為了顯示,需要轉換為對應的中文字串,這個時候就需要用到列舉類。 具體型別可以參考【8、銀

公眾號支付(V3版)jsp頁面jsapi統一下單調啟支付(java版)

web專案 按順序一步一步來 準備: 申請了微信支付介面的微信公眾號一枚 , 備案的域名網站一枚, (如果有沒有的這兩個東西會耽誤你很久,因為微信支付必須是線上,無法本地除錯,)  這裡說一下 如果有經濟條件的最好申請一臺win系統的伺服器作為測試伺服器這樣會使你省去很

支付過程遇到的問題

發現demo裡有幾處需要修改的。 第一問題: Warning: curl_setopt() expects parameter 2 to be long, string given in D:\

公眾號開發支付開發

微信公眾號開發對接,開發文件也有蠻多坑,所以一路的血淚教訓,這次先針對微信支付整理一下支付的踩坑全過程,開發時間緊現在整理出來,既是對此段時間的學習總結,也希望對遇到同樣問題的童鞋可以有參考價值。 1. 微信掃碼支付 認證微信服務號,申請開通微信支付功能,獲取到微信支付

整合第三方SDK爬坑總結支付

    轉眼間,成為程式設計師的時光又增長了一年,在過去的一段時間裡,忙於繁雜的專案以及一些個人瑣事而將寫部落格這件事擱置於一旁,這使得自已相對於別的奮戰在前線的同行們又落下了一大截。新的一年,必然得以全新的生活方式,全新的奮鬥目標來激勵不是很上進的自己。唉,讓各位同行見笑了

小程式開發支付(三)下單

在發起支付之前,後臺會生成商戶訂單,呼叫統一下單API,得到預支付資訊。我是使用的是這個SDKcom.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;     //統一下單返回結果類com.github.b

小程式開發支付(二)獲取openID

openID是微信使用者的唯一標識。我們通過從前端傳來的 code 呼叫登入API獲取openID和session_key。這個過程想必已經有很多例子。接下來我會介紹一種通過現成的SDK來實現。首先需要大家熟悉它。在下面的講解中,我會指出所用到的類和方法 cn.binaryw

Java支付(掃碼支付模式二)案例實戰

摘要:最近的一個專案中涉及到了支付業務,其中用到了微信支付和支付寶支付,在做的過程中也遇到些問題,所以現在總結梳理一下,分享給有需要的人,也為自己以後回顧留個思路。 一:微信支付接入準備工作: 首先,微信支付,只支援企業使用者,個人使用者是不能接入微信支付的,所以要想接入

iOS支付開發

因為專案需求,支付方式添加了微信支付。之前做過銀聯的支付,所以,感覺不會太難。 使用的SDK為1.7.是13年12月份的,還是手動管理記憶體。 實際支付的程式碼不難,就是幾個配置,因為專案之前做過微信分享,所以配置這步就省略了。 具體支付程式碼: //調

iOS支付(二)——本地生成訂單整合詳情

對於微信支付,可能還有很多人只知道從伺服器拿到相關引數然後去完成支付,感覺很簡單,不過也確實比較簡單,就那麼幾步,為什麼如此簡單呢?因為後臺幫我們完成了大概百分之八十的工作量,到咱們整合的時候肯定很