1. 程式人生 > >thinkphp 微信公眾號支付

thinkphp 微信公眾號支付

公眾號支付是指在微信app中訪問的頁面通過js直接調起微信支付;
因此頁面必須是在微信中開啟的;
示例專案:https://github.com/baijunyao/thinkphp-bjyadmin
一:設定域名
登入微信公眾平臺;
微信支付中設定支付授權目錄;把域名改為自己的;
注意最後是有一個斜線的 / 
白俊遙部落格
設定授權域名;
白俊遙部落格
二:匯入sdk
/ThinkPHP/Library/Vendor/Weixinpay
好吧;還是沒忍住要吐槽;鵝廠的sdk那酸爽誰用誰知道;專案中的sdk是我根據官方文件重構精簡打造而成的;
需要注意的是170行處的商品資料需要根據業務實際情況從資料庫中獲取;

$openid=$result
['openid']; // 訂單資料 請根據訂單號out_trade_no 從資料庫中查出實際的body、total_fee、out_trade_no、product_id $order=array( 'body'=>'test',// 商品描述(需要根據自己的業務修改) 'total_fee'=>1,// 訂單金額 以(分)為單位(需要根據自己的業務修改) 'out_trade_no'=>$out_trade_no,// 訂單號(需要根據自己的業務修改) 'product_id'=>'1',// 商品id(需要根據自己的業務修改) 'trade_type'
=>'JSAPI',// JSAPI公眾號支付 'openid'=>$openid// 獲取到的openid );
PHP

三:配置項
/Application/Common/Conf/config.php

'WEIXINPAY_CONFIG'       => array(
    'APPID'              => '', // 微信支付APPID
    'MCHID'              => '', // 微信支付MCHID 商戶收款賬號
    'KEY'                => '', // 微信支付KEY
    'APPSECRET'
=> '', // 公眾帳號secert (公眾號支付專用) 'NOTIFY_URL' => 'http://baijunyao.com/Api/Weixinpay/notify', // 接收支付狀態的連線 ),
PHP

在微信公眾平臺和微信支付平臺湊齊上面這些引數;
四:支付方法
/Application/Api/Controller/WeixinpayController.class.php

/**
 * 公眾號支付 必須以get形式傳遞 out_trade_no 引數
 * 示例請看 /Application/Home/Controller/IndexController.class.php
 * 中的wexinpay_js方法
 */
public function pay(){
    // 匯入微信支付sdk
    Vendor('Weixinpay.Weixinpay');
    $wxpay=new \Weixinpay();
    // 獲取jssdk需要用到的資料
    $data=$wxpay->getParameters();
    // 將資料分配到前臺頁面
    $assign=array(
        'data'=>json_encode($data)
        );
    $this->assign($assign);
    $this->display();
}
PHP

需要html的配合:/tpl/Api/Weixinpay/pay.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body style="text-align: center;">
<button onclick="getOrder()">購買</button>

<jquery />
<script>
function onBridgeReady(){
    var data={$data};
    WeixinJSBridge.invoke(
        'getBrandWCPayRequest', data,
        function(res){
            if(res.err_msg == "get_brand_wcpay_request:ok" ) {
                // 使用以上方式判斷前端返回,微信團隊鄭重提示:res.err_msg將在使用者支付成功後返回    ok,但並不保證它絕對可靠。
            }else{
                alert(res.err_code+res.err_desc+res.err_msg); // 顯示錯誤資訊
            }
        }
    );
}
 if (typeof WeixinJSBridge == "undefined"){
     if( document.addEventListener ){
         document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
     }else if (document.attachEvent){
         document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
         document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
     }
 }else{
      onBridgeReady();
 }
</script>
</body>
</html>
HTML

呼叫示例:/Application/Home/Controller/IndexController.class.php 中的wexinpay_js方法

/**
 * 微信 公眾號jssdk支付
 */
public function wexinpay_js(){
    // 此處根據實際業務情況生成訂單 然後拿著訂單去支付
    // 用時間戳虛擬一個訂單號  (請根據實際業務更改)
    $out_trade_no=time();
    // 組合url
    $url=U('Api/Weixinpay/pay',array('out_trade_no'=>$out_trade_no));
    // 前往支付
    redirect($url);
}
PHP

五:非同步接收通知
/Application/Api/Controller/WeixinpayController.class.php

/**
 * notify_url接收頁面
 */
public function notify(){
    // 匯入微信支付sdk
    Vendor('Weixinpay.Weixinpay');
    $wxpay=new \Weixinpay();
    $result=$wxpay->notify();
    if ($result) {
        // 驗證成功 修改資料庫的訂單狀態等 $result['out_trade_no']為訂單id

    }
}
PHP

//*********************************增加curl_get_contents函式的分割線****************************
如果是整合到自己的專案中;則需要在自己的公共函式中增加curl_get_contents;
/Application/Common/Common/function.php

/**
 * 使用curl獲取遠端資料
 * @param  string $url url連線
 * @return string      獲取到的資料
 */
function curl_get_contents($url){
    $ch=curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);                //設定訪問的url地址
    // curl_setopt($ch,CURLOPT_HEADER,1);               //是否顯示頭部資訊
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);               //設定超時
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);   //使用者訪問代理 User-Agent
    curl_setopt($ch, CURLOPT_REFERER,$_SERVER['HTTP_HOST']);        //設定 referer
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);          //跟蹤301
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        //返回結果
    $r=curl_exec($ch);
    curl_close($ch);
    return $r;
}
PHP

五:非同步接收通知
/Application/Api/Controller/WeixinpayController.class.php

/**
 * notify_url接收頁面
 */
public function notify(){
    // ↓↓↓下面的file_put_contents是用來簡單檢視非同步發過來的資料 測試完可以刪除;↓↓↓
    // 獲取xml
    $xml=file_get_contents('php://input', 'r');
    //轉成php陣列 禁止引用外部xml實體
    libxml_disable_entity_loader(true);
    $data= json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA));
    file_put_contents('./notify.text', $data);
    // ↑↑↑上面的file_put_contents是用來簡單檢視非同步發過來的資料 測試完可以刪除;↑↑↑
    // 匯入微信支付sdk
    Vendor('Weixinpay.Weixinpay');
    $wxpay=new \Weixinpay();
    $result=$wxpay->notify();
    if ($result) {
        // 驗證成功 修改資料庫的訂單狀態等 $result['out_trade_no']為訂單id

    }
}
PHP

相關推薦

thinkphp 公眾支付

公眾號支付是指在微信app中訪問的頁面通過js直接調起微信支付; 因此頁面必須是在微信中開啟的; 示例專案:https://github.com/baijunyao/thinkphp-bjyadmin 一:設定域名 登入微信公眾平臺; 微信支付中設定支付授權目錄;把域名改為自己的;注意最後是有一個斜線的

thinkphp整合系列之公眾支付

const simple 商品 simplex 支付平臺 doc 外部 center vendor thinkphp整合系列之微信公眾號支付 白俊遙 2016-07-17 11:26:52 PHP thinkphp 公眾號支付是指在微信app中訪問的頁面

公眾支付報文示例

cda 響應 xca mes amp 鏈接 返回值 col http 請求報文: 1 <xml> 2 <body><![CDATA[狄克酸奶店]]></body> 3 <callback_url&

個體戶沒有組織機構代碼證如何開通公眾支付

jpg alt 註意 方法 .com str 工作人員 個體工商戶 log 個體工商戶開通微信支付最新流程: 一、準備資料1.營業執照:有效期內的個體戶執照;2.身份證:經營者個人身份證照片;3.收款銀行賬戶:提現用的銀行賬號;4.手機號碼:客服人員的聯系手機號;5.郵箱

php公眾支付接口開發demo

targe param pre space secret 修改 pen host field 本支付接口使用Yii2框架,所以控制器的格式都是該框架的,不過放到其他框架都差不多,根據對應的規則修改一下控制器的方法名字就行了,親測有效,比較簡單,沒有封裝,想了解微信支付實現

公眾支付--錯誤記錄

二次 數組 格式轉換 println equals sig col package reat 微信公眾號支付調用統一下單接口時,微信返回的數據一定要二次組裝再給前臺,否則會有問題的,正確示範如下: /** * 獲取weixin支付的返回信息 * @pa

支付公眾支付) [記錄]

scope err question dir rec package ready fad span 後臺   先獲取code code有效5min     public string GetCodeUrl(string Appid, string redirect

***公眾支付+H5支付+掃碼支付+小程序支付+APP支付解決方案總結

ati asc alt creat chapter edit 隨機字符串 glob 測試 最近負責的一些項目開發,都用到了微信支付(微信公眾號支付、微信H5支付、微信掃碼支付、APP微信支付)。在開發的過程中,在調試支付的過程中,或多或少都遇到了一些問題,今天總結下,分享,

公眾支付開發全過程(java版)

sdk 命令 所有 data 權限 {} servle res ast 文章有不當之處,歡迎指正,如果喜歡微信閱讀,你也可以關註我的微信公眾號:好好學java,獲取優質學習資源。 一、微信官方文檔微信支付開發流程(公眾號支付) 首先我們到微信支付的官方文檔的開發步驟部分查

公眾支付

存在 分享圖片 itl 操作 mark clas 思考 域名認證 span 近期處理微信公眾號支付過程中遇到一些小問題,也因此引發了一些思考。 首先不得不吐槽一下微信公眾號的配置文檔沒有及時更新,對開發人員不夠細致,也因此迷茫了好久。 經過一輪研究和實

公眾支付踩坑記

系統 shm efi bsp 網絡異常 router nec 平臺 wiki   前兩周做微信H5支付,在瀏覽器端用的,天真地以為app掛到公眾號中也能用,結果不行>"<|||| ,只好再對接一次公眾號支付,微信的支付對接下來總體感覺就是封裝地不如支付寶,文檔不

vue項目使用公眾支付總結

tor 即將 script mut 頁面 com vue log string 微信公眾號支付 1. 使用jssdk調用微信支付,具體查看開發文檔; 使用的vuex,在mutations中 wechatPay (state, data) { sta

公眾支付(tp5)

                                        微信公眾號支付

thinkphp3.2公眾支付(jsapi支付)開發過程

第一次做微信支付(網頁版本的),折騰了兩天,記錄一下方便下次自己再次使用,也希望能幫和我一樣初次接觸的朋友踩一下坑。 前期準備 1.開通微信認證服務號,並且開通商戶平臺 2.下載微信支付dome,下載地址:https://pay.weixin.qq.com/wiki/doc/api/js

公眾支付/退款(java環境)開發介紹

開發之前翻閱了很多帖子,結合自己的實際開發情況,將微信支付/退款 流程以及code貼出,希望通過這一篇帖子就能解決你的問題,有不清楚的直接留言,我會及時回覆(ง •̀_•́)ง   一些說明:xxxUtils為工具類,Constant為常量類 為方便開發,所用和微信支付相關co

公眾支付JSAPI 詳細記錄

剛剛除錯通微信公眾號支付,寫個部落格記錄一下。 jsapi必要的幾個引數 微信公眾號的賬戶密碼,微信商戶賬號密碼. 登陸微信公眾號,左下角開發-基本配置,檢視APPID 1、公眾APPID(已經得到) 2、APPSECEPT(已經得到)   進入微信商戶平

公眾支付(一)統一下單

最近在研究微信公眾號的支付開發,一開始對著開發文件各種懵,也自然而然地跳入了各種坑,現在把整個開發過程簡略地做個記錄。 1.開發環境準備 首先要有一個微信服務號,訂閱號是不能開通微信支付的。微信公眾號申請微信支付後,接著申請微信支付商戶平臺,公眾號上面已經標明“公眾平臺微信支付公眾號支付授權

公眾支付(二)H5調起支付

上一篇講到統一下單,得到微信返回的預支付交易會話標識prepay_id,那麼下單完成後要做的就是在html頁面調起支付視窗。 檢視官方文件:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&

公眾支付掃碼(PHP)

基本思路: 1、使用者掃碼進入我們的系統頁面(自己定義的一個使用者輸入金額的頁面)       通過獲取CODE然後獲取openid 2、使用者輸完金額後,點選支付按鈕,進入統一支付介面   &nbs

公眾支付開發手記(node)

微信支付 前言 總結一下最近業務開發中對微信公眾號支付的開發過程,微信支付的開發前提是已經具備可上線微信公眾號開發的基礎上進行的,如果你的開發階段目前停留在起步,建議參考這篇文章開始。 好了,來聊一聊微信支付。不論是今天的分享,還是網上其他的分享,開頭總是在吐槽微信的文件。我也不例外,剛開始總是覺得文件