您的位置:

微信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支付的流程和注意事项,希望对开发者能有所帮助。如有疑问或错误,欢迎指出。

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

本文目录一览: 1、如何用PHP实现微信支付,求教。新手!说明详细点 2、JS交互微信之JSAPI支付 3、java实现微信支付,通过JSAPI发起支付请求 4、微信的jsapi支付能整合到think

2023-12-08
微信JSAPI支付详解

2023-05-21
jsapi微信支付源码(小微商户jsapi支付)

本文目录一览: 1、微信支付怎么配置jsapi 2、JS交互微信之JSAPI支付 3、java实现微信支付,通过JSAPI发起支付请求 4、微信支付后端篇 微信支付怎么配置jsapi 微信支付,是微信

2023-12-08
php微信支付v3版签名生成(php 微信支付流程)

2022-11-12
微支付js调用实例,前端实现微信支付

本文目录一览: 1、微信h5支付和jsapi支付的区别 2、redirect_url参数错误总结 3、微支付怎么用啊 4、微信公众平台如何开通微信支付? 5、微支付怎么开通 6、微支付中扫码支付开发流

2023-12-08
调试支付jsapi,支付安装调试费

本文目录一览: 1、jsapi支付什么意思? 2、调用支付jsapi缺少参数是什么意思 3、微信支付时jsapi缺少参数appid怎么办 4、JS交互微信之JSAPI支付 jsapi支付什么意思? J

2023-12-08
php开发微信支付小微商户v3,html5微信支付php

2023-01-07
微信jsapi源码(微信开发API)

本文目录一览: 1、微信的jsapi支付能整合到thinkphp吗 2、JS交互微信之JSAPI支付 3、微信支付怎么配置jsapi 微信的jsapi支付能整合到thinkphp吗 在demo文件夹中

2023-12-08
微信JSAPI全面指南

2023-05-17
ios调用jsapi,ios调用微信支付

本文目录一览: 1、如何在React中调用微信的jsSDK 2、微信支付时jsapi缺少参数appid怎么办 3、php微信支付,调用jsapi的时候,IOS成功支付,安卓提示fail_invalid

2023-12-08
php微信支付统一下单,微信支付 php

2023-01-05
微信网页js操作(微信网页js操作流程)

本文目录一览: 1、微信小程序wxs的使用(当页面数据渲染前添加js操作) 2、公众号h5中使用微信JS-SDK(个人笔记) 3、JS交互微信之JSAPI支付 微信小程序wxs的使用(当页面数据渲染前

2023-12-08
微信刷卡支付java,微信刷卡支付一天限额多少

2022-11-21
uniapp微信小程序支付全面解析

2023-05-20
php版微信js,微信公众号 php

2022-11-19
php微信支付回调,微信支付成功回调

2022-11-26
php微信支付不停给回调,php 微信支付回调

2023-01-04
微信支付接口详解

2023-05-20
php微信支付回调接口,php对接微信支付教程

2022-11-25
微信小程序转php,微信小程序转h5

2022-11-24