微信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/n/332145.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
OCYINOCYIN
上一篇 2025-01-21 17:30
下一篇 2025-01-21 17:30

相关推荐

  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 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

发表回复

登录后才能评论