微信jsapi源碼(微信開發API)

本文目錄一覽:

微信的jsapi支付能整合到thinkphp嗎

在demo文件夾中:

js_api_call.php:提供了微信jsapi的主要功能

log_.php:提供列印日誌功能

notify_url.php:非同步通知功能

notify_url.log:非同步通知日誌

qrcode.js:生成二維碼js插件

接下來介紹下WxPayPubHelper文件夾下的文件:

cacert 文件夾是存放微信證書的(PS:具體我還沒怎麼用證書,雖然下載下來了,證書請在微信商戶平台上下載)

SDKRuntimeException.php:這個就是處理異常的、

WxPay.pub.config.php:這個是做一些配置的,稍後會詳細講解

WxPayPubHelper.php:這個其實就是微信支付的工具類,對於初學者只要知道怎麼用他裡面的方法就夠了

OK,了解了微信官方提供的文件,我們就可以開始整合到TP中了,廢話不多說,這就開始!

step1:將demo中的WxPayPubHelper整個文件夾都複製到TP的Vendor目錄下,像我這樣:

step2:配置WxPay.pub.config.php文件:

這裡的配置都有注釋,如果還有不懂或者配置出現問題可以留言提問

同時我把微信的這個配置放到了TP的config中,這一步大家可以隨意

?php

return array(

//’配置項’=’配置值’

define(‘WEB_HOST’, ‘這是您的網站域名地址’),

/*微信支付配置*/

‘WxPayConf_pub’=array(

‘APPID’ = ‘您的APPID’,

‘MCHID’ = ‘您的商戶ID’,

‘KEY’ = ‘商戶秘鑰’,

‘APPSECRET’ = ‘您的APPSECRET’,

‘JS_API_CALL_URL’ = WEB_HOST.’/index.php/Home/WxJsAPI/jsApiCall’,

‘SSLCERT_PATH’ = WEB_HOST.’/ThinkPHP/Library/Vendor/WxPayPubHelper/cacert/apiclient_cert.pem’,

‘SSLKEY_PATH’ = WEB_HOST.’/ThinkPHP/Library/Vendor/WxPayPubHelper/cacert/apiclient_key.pem’,

‘NOTIFY_URL’ = WEB_HOST.’/index.php/Home/WxJsAPI/notify’,

‘CURL_TIMEOUT’ = 30

)

);

複製代碼

step3:將生成二維碼的js放在Public目錄下(這裡目前用不到,在用掃碼支付的情況才用到這個js),將日誌文件放在Public目錄下:像我這樣:

step4:創建控制器:這裡創建了一個WxJsAPIController的控制器,這裡大家隨便起名字,只要這個跟你們在公眾平台上的設置相對應就可以(公眾平台設置稍後介紹)

下面是控制器的代碼部分了,首先初始化控制器,將WxPayPubHelper導入

/**

* 初始化

*/

public function _initialize()

{

//引入WxPayPubHelper

vendor(‘WxPayPubHelper.WxPayPubHelper’);

}

複製代碼

接下來是使用統一支付介面,獲取prepay_id的方法:

public function jsApiCall()

{

//使用jsapi介面

$jsApi = new \JsApi_pub();

//=========步驟1:網頁授權獲取用戶openid============

//通過code獲得openid

if (!isset($_GET[‘code’]))

{

//觸發微信返回code碼

$url = $jsApi-createOauthUrlForCode(C(‘WxPayConf_pub.JS_API_CALL_URL’));

Header(“Location: $url”);

}else

{

//獲取code碼,以獲取openid

$code = $_GET[‘code’];

$jsApi-setCode($code);

$openid = $jsApi-getOpenId();

}

//=========步驟2:使用統一支付介面,獲取prepay_id============

//使用統一支付介面

$unifiedOrder = new \UnifiedOrder_pub();

//設置統一支付介面參數

//設置必填參數

//appid已填,商戶無需重複填寫

//mch_id已填,商戶無需重複填寫

//noncestr已填,商戶無需重複填寫

//spbill_create_ip已填,商戶無需重複填寫

//sign已填,商戶無需重複填寫

$unifiedOrder-setParameter(“openid”,$openid);//商品描述

$unifiedOrder-setParameter(“body”,”貢獻一分錢”);//商品描述

//自定義訂單號,此處僅作舉例

$timeStamp = time();

$out_trade_no = C(‘WxPayConf_pub.APPID’).$timeStamp;

$unifiedOrder-setParameter(“out_trade_no”,$out_trade_no);//商戶訂單號

$unifiedOrder-setParameter(“total_fee”,”1″);//總金額

$unifiedOrder-setParameter(“notify_url”,C(‘WxPayConf_pub.NOTIFY_URL’));//通知地址

$unifiedOrder-setParameter(“trade_type”,”JSAPI”);//交易類型

//非必填參數,商戶可根據實際情況選填

//$unifiedOrder-setParameter(“sub_mch_id”,”XXXX”);//子商戶號

//$unifiedOrder-setParameter(“device_info”,”XXXX”);//設備號

//$unifiedOrder-setParameter(“attach”,”XXXX”);//附加數據

//$unifiedOrder-setParameter(“time_start”,”XXXX”);//交易起始時間

//$unifiedOrder-setParameter(“time_expire”,”XXXX”);//交易結束時間

//$unifiedOrder-setParameter(“goods_tag”,”XXXX”);//商品標記

//$unifiedOrder-setParameter(“openid”,”XXXX”);//用戶標識

//$unifiedOrder-setParameter(“product_id”,”XXXX”);//商品ID

$prepay_id = $unifiedOrder-getPrepayId();

//=========步驟3:使用jsapi調起支付============

$jsApi-setPrepayId($prepay_id);

$jsApiParameters = $jsApi-getParameters();

$this-assign(‘jsApiParameters’,$jsApiParameters);

$this-display(‘pay’);

//echo $jsApiParameters;

}

複製代碼

這裡都是複製微信demo的,改改名字罷了,沒什麼其他的

接下來是非同步通知方法,也是複製的微信demo上的

public function notify()

{

//使用通用通知介面

$notify = new \Notify_pub();

//存儲微信的回調

$xml = $GLOBALS[‘HTTP_RAW_POST_DATA’];

$notify-saveData($xml);

//驗證簽名,並回應微信。

//對後台通知交互時,如果微信收到商戶的應答不是成功或超時,微信認為通知失敗,

//微信會通過一定的策略(如30分鐘共8次)定期重新發起通知,

//儘可能提高通知的成功率,但微信不保證通知最終能成功。

if($notify-checkSign() == FALSE){

$notify-setReturnParameter(“return_code”,”FAIL”);//返回狀態碼

$notify-setReturnParameter(“return_msg”,”簽名失敗”);//返回信息

}else{

$notify-setReturnParameter(“return_code”,”SUCCESS”);//設置返回碼

}

$returnXml = $notify-returnXml();

echo $returnXml;

//==商戶根據實際情況設置相應的處理流程,此處僅作舉例=======

//以log文件形式記錄回調信息

// $log_ = new Log_();

$log_name= __ROOT__.”/Public/notify_url.log”;//log文件路徑

log_result($log_name,”【接收到的notify通知】:\n”.$xml.”\n”);

if($notify-checkSign() == TRUE)

{

if ($notify-data[“return_code”] == “FAIL”) {

//此處應該更新一下訂單狀態,商戶自行增刪操作

log_result($log_name,”【通信出錯】:\n”.$xml.”\n”);

}

elseif($notify-data[“result_code”] == “FAIL”){

//此處應該更新一下訂單狀態,商戶自行增刪操作

log_result($log_name,”【業務出錯】:\n”.$xml.”\n”);

}

else{

//此處應該更新一下訂單狀態,商戶自行增刪操作

log_result($log_name,”【支付成功】:\n”.$xml.”\n”);

}

//商戶自行增加處理流程,

//例如:更新訂單狀態

//例如:資料庫操作

//例如:推送支付完成信息

}

}

複製代碼

這裡我把記錄日誌的類寫到了function.php中:

function log_result($file,$word)

{

$fp = fopen($file,”a”);

flock($fp, LOCK_EX) ;

fwrite($fp,”執行日期:”.strftime(“%Y-%m-%d-%H:%M:%S”,time()).”\n”.$word.”\n\n”);

flock($fp, LOCK_UN);

fclose($fp);

}

複製代碼

好了 其實控制器的方法就這麼多,沒什麼其他的了,下面看一下頁面,直接上代碼吧:

!DOCTYPE html

html

head

meta http-equiv=”content-type” content=”text/html;charset=utf-8″/

title微信安全支付/title

script type=”text/javascript”

//調用微信JS api 支付

function jsApiCall()

{

WeixinJSBridge.invoke(

‘getBrandWCPayRequest’,

?php echo $jsApiParameters; ?,

function(res){

WeixinJSBridge.log(res.err_msg);

alert(res.err_code+res.err_desc+res.err_msg);

//alert(“{$jsApiParameters}”);

}

);

}

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();

}

}

/script

/head

body

/br/br/br/br

div align=”center”

button style=”width:210px; height:30px; background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;” type=”button” onclick=”callpay()” 貢獻一下/button

/div

/body

/html

複製代碼

無須改動什麼,直接複製就好

接下來是微信公眾平台上的配置了,這裡我遇到過問題,如果有在這裡遇到問題的同學請留言,比如出現了access_deined或者access_notallowed等問題,這都可能是因為這裡配置不對。

JS交互微信之JSAPI支付

本篇為 JS交互微信系列篇 的第四篇 微信JSAPI支付 ,記錄在微信內置瀏覽器內用調用微信支付過程。

JSAPI支付是用戶在微信中打開商戶的H5頁面,商戶在H5頁面通過調用微信支付提供的JSAPI介面調起微信支付模塊完成支付。

要擁有兩個賬號:

要開通產品中心的JSAPI支付。然後 產品中心=開發配置=支付配置=公眾號支付配置 綁定支付授權目錄,寫已通過ICP備案的域名。

另外,要在ip白名單中,配置測試地址ip和線上生產地址ip,不然各種回調都會失敗!

由於在微信內支付需要獲取用戶的 openid ,要獲取它則必須通過網頁授權配置。在公微信公眾平台中, 公眾號設置=功能設置=網頁授權域名 中按要求填寫。

在支付流程方面,重點依然都在後端處理,前端方面步驟比較簡單。本文只敘述前端內容。

在將要進入支付的前一頁面,直接接入微信授權,然後跳轉進要支付的那個頁面。舉個例子:有a、b兩個頁面,在b頁面用到支付,b頁面由a頁面跳轉而來。那麼在a頁面跳b頁面的時候,別直接跳轉b的url,而是跳轉到:

{appId}redirect_uri={b.html}response_type=codescope=snsapi_base#wechat_redirect

我們注意到,這裡有這兩個需要自己寫的參數: appid 和 redirect_uri ,意義是:

另外,還有一個注意的點是, b.html這個url我們要進行encode轉碼,不然地址解析可能會出現問題!

上一步執行完後,在微信瀏覽器中,我們會得到一個鏈接,類似:

b.html?code={code}state=#/

在此處,我們得到了一個code值,這就是我們獲取 openid 的憑證了。

獲取方法當然是把值傳給後台,後台去處理啦~

在上一步中,我們拿到code值後,就可以提交一些信息給後端了,比如商品相關屬性、總價等,另外加上code值,傳給後端。後端一頓操作後,返回給前端。我們需要的參數如下(後端返回下面這些參數):

上個步驟拿到需要交互微信的參數後,就開始調用微信的支付介面了,如下:

至此,調用微信JSAPI來完成在微信內的支付就完成了。

微信支付怎麼配置jsapi

微信支付,是微信向有出售物品/提供服務需求的商家提供推廣銷售、支付收款、經營分析的整套解決方案,包括多種支付方式,如付款碼支付、JSAPI支付、小程序支付、APP支付、電腦網站支付、企業微信支付、H5支付,以及多種支付工具,如微信紅包、代金券等。

微信支付配置步驟:

步驟1:註冊支付商戶號

步驟2、秘鑰(32位)

步驟3、上傳證書

步驟4、商戶號新增小程序授權(注意授權狀態是否是成功)

步驟5、公眾號支付、JSAPI開通

登錄小程序後台找到配置管理→支付配置

登錄開通微信支付商戶平台(),在微信支付商戶平台裡面進行查找商戶號和設置API密鑰、下載證書

以下步驟查找上述基礎的內容在哪個地方查找。

步驟1、支付商戶號查找:

(註:登錄商戶號盡量使用360瀏覽器或者谷歌瀏覽器)

進入後在 賬戶中心—商戶信息、可以看到微信支付商戶號、把商戶號記一下,填到後台。

註:首次進入微信支付後台需要下載控制項和操作證書(按照提示一步步操作即可)

步驟二:API密鑰:隨後點擊下面的API安全、設置一下API秘鑰,API密鑰必須是32位字母或數字

註:該處設置秘鑰時看下設置下方的API秘鑰,不要設置APIV3的秘鑰。

註:該處設置下後把新設置的密鑰填到製作後台。

步驟三:證書路徑、密鑰路徑:API秘鑰設置好了之後、點擊下載API證書

(註:該處證書上傳用於退款。退款需要往商戶號里充值錢。)

下載後是一個壓縮包,然後解壓、然後根據名稱分別上傳到證書路徑、密鑰路徑。

步驟四:小程序在公眾號里申請,公眾號里開通的微信支付;該方式需要先登錄商戶號-產品中心-APPID授權管理-新增該小程序的授權。具體如下圖:

如提示已綁定(此步驟跳過)

授權後到微信小程序後台同意授權。如圖:

確保上圖申請單狀態是授權成功。

步驟五:查看微信支付商戶號公眾號支付、JSAPI是否開通。如下圖:(如未開通,點擊開通下,如果沒有公眾號支付可不用管)

(1)公眾號支付開通(如果沒有公眾號支付,此步驟跳過)

(2)JSAPI開通

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/303749.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-31 11:50
下一篇 2024-12-31 11:50

相關推薦

  • 掌握magic-api item.import,為你的項目注入靈魂

    你是否曾經想要導入一個模塊,但卻不知道如何實現?又或者,你是否在使用magic-api時遇到了無法導入的問題?那麼,你來到了正確的地方。在本文中,我們將詳細闡述magic-api的…

    編程 2025-04-29
  • 雲智直聘 源碼分析

    本文將會對雲智直聘的源碼進行分析,包括前端頁面和後端代碼,幫助讀者了解其架構、技術實現以及對一些常見的問題進行解決。通過本文的閱讀,讀者將會了解到雲智直聘的特點、優勢以及不足之處,…

    編程 2025-04-29
  • Python網站源碼解析

    本文將從多個方面對Python網站源碼進行詳細解析,包括搭建網站、數據處理、安全性等內容。 一、搭建網站 Python是一種高級編程語言,適用於多種領域。它也可以用於搭建網站。最常…

    編程 2025-04-28
  • Vertx網關:高效率的API網關中心

    Vertx是一個基於JVM的響應式編程框架,是最適合創建高擴展和高並發應用程序的框架之一。同時Vertx也提供了API網關解決方案,即Vertx網關。本文將詳細介紹Vertx網關,…

    編程 2025-04-28
  • Elasticsearch API使用用法介紹-get /_cat/allocation

    Elasticsearch是一個分散式的開源搜索和分析引擎,支持全文檢索和數據分析,並且可伸縮到上百個節點,處理PB級結構化或非結構化數據。get /_cat/allocation…

    編程 2025-04-28
  • 解析Azkaban API Flow執行結果

    本文將從多個方面對Azkaban API Flow執行結果進行詳細闡述 一、Flow執行結果的返回值 在調用Azkaban API的時候,我們一般都會通過HTTP請求獲取Flow執…

    編程 2025-04-27
  • 源碼是什麼

    源碼是一段計算機程序的原始代碼,它是程序員所編寫的可讀性高、理解性強的文本。在計算機中,源碼是指編寫的程序代碼,這些代碼按照一定規則排列,被計算機識別並執行。 一、源碼的組成 源碼…

    編程 2025-04-27
  • Go源碼閱讀

    Go語言是Google推出的一門靜態類型、編譯型、並髮型、語法簡單的編程語言。它因具有簡潔高效,內置GC等優秀特性,被越來越多的開發者所鍾愛。在這篇文章中,我們將介紹如何從多個方面…

    編程 2025-04-27
  • Python怎麼看源碼

    本文將從以下幾個方面詳細介紹Python如何看源碼,幫助讀者更好地了解Python。 一、查看Python版本 在查看Python源碼之前,首先需要確認Python版本。可以在命令…

    編程 2025-04-27
  • 源碼審計面試題用法介紹

    在進行源碼審計面試時,可能會遇到各種類型的問題,本文將以實例為基礎,從多個方面對源碼審計面試題進行詳細闡述。 一、SQL注入 SQL注入是常見的一種攻擊方式,攻擊者通過在輸入的參數…

    編程 2025-04-27

發表回復

登錄後才能評論