微信JSAPI支付詳解

一、概述

微信JSAPI支付是指通過微信公眾號或開放平台的網頁授權獲取用戶openid,再通過JSAPI介面完成支付的一種移動支付方式。它主要適用於微信公眾號開發、微信小程序開發等場景。

本文將從準備工作、支付流程和注意事項三個方面詳細介紹微信JSAPI支付。

二、準備工作

在進行微信JSAPI支付時,需要完成以下準備工作:

1、開通微信支付功能,並完成商戶認證;

2、獲取微信支付相關API信息,包括appid、mchid、key等;

3、在微信公眾平台或開放平台創建應用,並完成綁定,獲取appid和appsecret;

4、在應用中完成OAuth2.0網頁授權,獲取用戶openid。

完成以上準備工作後,即可進入微信JSAPI支付流程。

三、支付流程

微信JSAPI支付的流程主要包括以下步驟:

1、獲取用戶授權

用戶需先授權給商戶公眾號或開放平台,允許查詢用戶基本信息,包括openid。

// 獲取微信OAuth2.0授權
var wxAuth = "https://open.weixin.qq.com/connect/oauth2/authorize?";
var appId = "appid=YOUR_APPID";
var redirectUri = "&redirect_uri=YOUR_REDIRECT_URI";
var responseType = "&response_type=code";
var scope = "&scope=snsapi_base";
var state = "&state=STATE#wechat_redirect";

var url = wxAuth + appId + redirectUri + responseType + scope + state;
window.location.href = url;

2、生成預支付訂單

商戶後台調用微信統一下單介面,生成預支付訂單,同時返回預支付交易會話標識prepay_id。

// 獲取微信統一下單介面
var wxUnifiedOrder = "https://api.mch.weixin.qq.com/pay/unifiedorder";

// 構造預支付訂單參數
var data = {
    appid: "YOUR_APPID",  // 公眾號appid
    mch_id: "YOUR_MCHID",  // 商戶號
    nonce_str: "RANDOM_STRING",  // 隨機字元串
    body: "PRODUCT_NAME",  // 商品描述
    out_trade_no: "YOUR_ORDER_NUMBER",  // 商戶訂單號
    total_fee: "TOTAL_FEE",  // 總金額(單位:分)
    spbill_create_ip: "IP_ADDRESS",  // 終端IP
    notify_url: "YOUR_NOTIFY_URL",  // 通知地址
    trade_type: "JSAPI",  // 交易類型
    openid: "USER_OPENID"  // 用戶openid
};
// 對參數進行簽名
data.sign = sign(data, "YOUR_KEY");
// 將參數轉換為XML格式
var postData = convertToXml(data);
// 發送計算預支付訂單請求
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
        // 解析支付介面返回的XML數據
        var response = parseXml(xhr.responseText);
        // 獲取prepay_id
        var prepayId = response.prepay_id;
    }
}
xhr.open("POST", wxUnifiedOrder, true);
xhr.send(postData);

3、生成支付參數

根據微信支付API規範,生成支付參數。

// 構造支付參數
var params = {
    appId: "YOUR_APPID",
    nonceStr: "RANDOM_STRING",
    package: "prepay_id=" + prepayId,
    signType: "MD5",
    timeStamp: new Date().getTime()/1000|0
};
// 對參數進行簽名
params.paySign = sign(params, "YOUR_KEY");

4、調用微信支付介面

調用微信支付JSAPI介面進行支付。

// 調用微信支付JSAPI
WeixinJSBridge.invoke('getBrandWCPayRequest', params, function(res) {
    if (res.err_msg == "get_brand_wcpay_request:ok") {
        // 支付成功後的處理邏輯
    } else {
        // 支付失敗後的處理邏輯
    }
});

四、注意事項

在使用微信JSAPI支付時,需要注意以下幾點:

1、請確保公眾號或開放平台已完成認證,並正確獲取相應API信息。

2、預支付訂單的費用單位是分,需要注意轉化。

3、生成支付參數時,請確保參數的完整性和正確性,並進行簽名。

4、調用微信支付介面前需先判斷WeixinJSBridge是否存在。

5、在本地測試時需使用HTTPS協議。

總結

本文詳細介紹了微信JSAPI支付的流程和注意事項,希望對開發者能有所幫助。如有疑問或錯誤,歡迎指出。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
OCYIN的頭像OCYIN
上一篇 2025-01-21 17:30
下一篇 2025-01-21 17:30

相關推薦

  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • C語言貪吃蛇詳解

    一、數據結構和演算法 C語言貪吃蛇主要運用了以下數據結構和演算法: 1. 鏈表 typedef struct body { int x; int y; struct body *nex…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25

發表回復

登錄後才能評論