微信支付jsapi完整源碼(微信jsapi支付demo)

本文目錄一覽:

如何用PHP實現微信支付,求教。新手!說明詳細點

以PHP語言為例,對微信支付的開發流程進行一下說明:

1.獲取訂單信息。

2.根據訂單信息和支付相關的賬號生成sign,並且生成支付參數。

3.將支付參數信息POST到微信伺服器,獲取返回信息。

4.根據返回信息生成相應的支付代碼(微信內部)或是支付二維碼(非微信內),完成支付。

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來完成在微信內的支付就完成了。

java實現微信支付,通過JSAPI發起支付請求

在config.jsp填 好 在ResponseHandler填下APPKEY 用wxm-pay-api-demo.html或者jsapi.jsp我測試是都可以用.試能用哪個用哪個吧 JS已經搞好了

ResponseHandler,ResponseHandler,payNotifyUrl.jsp都修了..

微信的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等問題,這都可能是因為這裡配置不對。

通過手機點鏈接後可以跳轉到微信支付的源碼怎麼寫?

微信公司平台帳號註冊後官方首頁很簡單,沒有導航欄目頁面新建等功能。需要通過三方軟體與微信介面做二次開發。首先要在現在微信開個介面,這是要工商局認證的。

最近一個項目用手機上的瀏覽器(不是微信瀏覽器)瀏覽html5網頁時,看到有的網站點擊「微信支付」時,直接打開了微信進行支付(也就是在瀏覽器直接調用微信),這個是怎麼做到的?

比如頁面上有個文字鏈接:微信支付,點擊之後就自動調取微信APP了,而且我不是用微信瀏覽器打開的網頁。最新實用的微信H5手機網站支付源碼實例。

效果圖片如下:

完整代碼如下:即使在Safari中,也是可以點擊一個鏈接到達微信支付界面,只是用戶支付完了以後,目前還沒有方法再返回到Safari。 如果是自己開發的app,當然更沒有任何問題了,可以實現和native app一樣的效果。

 源碼如下:

html

head

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

meta id=”viewport” name=”viewport” content=”width=device-width; initial-scale=1.0; maximum-scale=1; user-scalable=no;” /

body,p,ul,li,h1,h2,form,input{margin:0;padding:0;}

h1,h2{font-size:100%;}

ul{list-style:none;}

body{-webkit-user-select:none;-webkit-text-size-adjust:none;font-family:Helvetica;background:#ECECEC;}

html,body{height:100%;}

a,button,input,img{-webkit-touch-callout:none;outline:none;}

a{text-decoration:none;}

.hide{display:none!important;}

.cf:after{content:”.”;display:block;height:0;clear:both;visibility:hidden;}

a[class*=”btn”]{display:block;height:42px;line-height:42px;color:#FFFFFF;text-align:center;border-radius:5px;}

.btn-blue{background:#3D87C3;border:1px solid #1C5E93;}

.btn-green{background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #43C750), color-stop(1, #31AB40));border:1px solid #2E993C;box-shadow:0 1px 0 0 #69D273 inset;}

.charge{font-family:Helvetica;padding-bottom:10px;-webkit-user-select:none;}

.charge h1{height:44px;line-height:44px;color:#FFFFFF;background:#3D87C3;text-align:center;font-size:20px;-webkit-box-sizing:border-box;box-sizing:border-box;}

.charge h2{font-size:14px;color:#777777;margin:5px 0;text-align:center;}

.charge .content{padding:10px 12px;}

.charge .select li{position:relative;display:block;float:left;width:100%;margin-right:2%;height:150px;line-height:150px;text-align:center;border:1px solid #BBBBBB;color:#666666;font-size:16px;margin-bottom:5px;border-radius:3px;background-color:#FFFFFF;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;}

.charge .price{border-bottom:1px dashed #C9C9C9;padding:10px 10px 15px;margin-bottom:20px;color:#666666;font-size:12px;}

.charge .price strong{font-weight:normal;color:#EE6209;font-size:26px;font-family:Helvetica;}

.charge .showaddr{border:1px dashed #C9C9C9;padding:10px 10px 15px;margin-bottom:20px;color:#666666;font-size:12px;text-align:center;}

.charge .showaddr strong{font-weight:normal;color:#9900FF;font-size:26px;font-family:Helvetica;}

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

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

相關推薦

  • 打造照片漫畫生成器的完整指南

    本文將分享如何使用Python編寫一個簡單的照片漫畫生成器,本文所提到的所有代碼和技術都適用於初學者。 一、環境準備 在開始編寫代碼之前,我們需要準備一些必要的環境。 首先,需要安…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Python中文版下載官網的完整指南

    Python是一種廣泛使用的編程語言,具有簡潔、易讀易寫等特點。Python中文版下載官網是Python學習和使用過程中的重要資源,本文將從多個方面對Python中文版下載官網進行…

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

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

    編程 2025-04-29
  • 伺服器安裝Python的完整指南

    本文將為您提供伺服器安裝Python的完整指南。無論您是一位新手還是經驗豐富的開發者,您都可以通過本文輕鬆地完成Python的安裝過程。以下是本文的具體內容: 一、下載Python…

    編程 2025-04-29
  • 微信小程序和Python數據交互完整指南

    本篇文章將從多個方面介紹如何在微信小程序中實現與Python的數據交互。通過本文的學習,您將掌握如何將微信小程序與後台Python代碼結合起來,實現更豐富的功能。 一、概述 微信小…

    編程 2025-04-29
  • 使用Snare服務收集日誌:完整教程

    本教程將介紹如何使用Snare服務收集Windows伺服器上的日誌,並將其發送到遠程伺服器進行集中管理。 一、安裝和配置Snare 1、下載Snare安裝程序並安裝。 https:…

    編程 2025-04-29
  • 使用Python圖書館搶座腳本的完整步驟

    本文將從多個方面詳細介紹如何使用Python編寫圖書館的座位搶佔腳本,並幫助您快速了解如何自動搶佔圖書館的座位,並實現您的學習計劃。 一、開發環境搭建 首先,我們需要安裝Pytho…

    編程 2025-04-28
  • Python Flask系列完整示例

    Flask是一個Python Web框架,在Python社區中非常流行。在本文中,我們將深入探討一些常見的Flask功能和技巧,包括路由、模板、表單、資料庫和部署。 一、路由 Fl…

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

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

    編程 2025-04-28

發表回復

登錄後才能評論