微信 JSAPI 支付流程

微信支付(JSAPI支付)接入流程 JSAPI支付是指商户通过调用微信支付提供的JSAPI接口,在支付场景中调起微信支付模块完成收款。 阅读详情

微信支付,开发文档地址:

https://pay.weixin.qq.com/wiki/doc/api/index.html

JSAPI支付文档地址:

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2

微信支付分为5种:
Jsapi支付,二维码支付,H5支付,小程序支付,App支付

Jsapi支付流程:

A:获取open_id

第一步:用户同意授权,获取code
在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
第二步:通过code换取授权access_token
首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。获取code后,请求以下链接获取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

 B: 调用统一接口,预支付

必传参数:

#预支付接口
wx.uniformorder = https://api.mch.weixin.qq.com/pay/unifiedorder

必传参数:
trade_type:jsapi,
open_id:用授权获取的open_id
Appid:企业号corpid即为此appId
Mch_id:微信支付分配的商户号
Notify_url:异步回调的url
nonce_str:随机字符串
Sign:签名
Body:商品描述
out_trade_no:商户订单号自己生成的(当前时间加时间戳)
total_fee:金额(分)

(3) 这些参数使用xml格式发送给微信的统一下单接口,并返回两个参数return_code为success时,微信端再次返回result_code为success时返回两个参数prepay_id,trade_type。
简单来说:微信给我们返回两个success时就会给我们返回prepay_id和trade_type。
(4) 返回的参数我们进行处理,处理成我们所需要的参数有:

    appId:商户注册具有支付权限的公众号成功后即可获得
    timeStamp:时间戳
    nonceStr:随机字符串
    Package:统一下单接口返回的prepay_id参数值,提交格式如:prepay_id=*** 
    signType:签名类型(HMAC-SHA256)这里的签名方式和统一下单方式一致
    Paysign:签名

(5) 微信支付界面调起配置分为两种:
a.一种是使用微信的内置对象WeixinJSBridge,把我们提前处理微信的返回参数放入getBrandWCPayRequest中

 b.另一种是调用jssdk包,但是前提需要配置jssdk包wx.config,再配置微信支付,把我们提前处理微信的返回参数放入wx.chooseWXPay,唤起微信支付页面。
发起一个微信支付请求

wx.chooseWXPay({
		timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
		nonceStr: '', // 支付签名随机串,不长于 32 位
		package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
		signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
		paySign: '', // 支付签名
		success: function (res) {
			// 支付成功后的回调函数
		}
	});

备注:prepay_id 通过微信支付统一下单接口拿到,paySign 采用统一的微信支付 Sign 签名生成方法,注意这里 appId 也要参与签名,appId 与 config 中传入的 appId 一致,即最后参与签名的参数有appId, timeStamp, nonceStr, package, signType。

(6) 用户支付成功微信端会向我们填写的异步回调地址发起请求,给我们提示支付状态。我们需要返回一个success

<xml> 
 	 <return_code><![CDATA[SUCCESS]]></return_code>
  		<return_msg><![CDATA[OK]]></return_msg>
	</xml>

让微信端知道我们知道的微信支付成功了。

如果我们没给微信端返回success或超时,微信会判定本次通知失败,重新发送通知,直到成功为止

(在通知一直不成功的情况下,微信总共会发起10次通知,通知频率为15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h - 总计 24h4m),

但微信不保证通知最终一定能成功。


(7) 当然我不能相信微信给我们的支付状态,因为这个回调url,别人可以模拟出一个url,微信端就会向模拟出来的回调地址发送请求,会发生用户付过钱了但是没有订单的情况,这是很不安全的。所以我们不能相信微信给我们返回的,我们需要异步向微信查询订单接口,查询订单的支付状态
(8) 如果我们使用jssdk包,那么我们还需要通过配置wx.config。而wx.config的参数signature是通过。

参考:
概述 | 微信开放文档
a. 第一步获取access_token
https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
b. 第二步获取jsapi_ticket
用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
c. 第三步生成signature

签名算法

签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。即signature=sha1(string1)。

wx.config({
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名
    jsApiList: [] // 必填,需要使用的JS接口列表
});

微信小程序之支付流程整理--jsapi APP native的含义等 小程序支付流程1、小程序调用wx.login() 获取 临时登录凭证code(用户登录凭证(有效期五分钟)) ,并回传到开发者服务器。2、开发者需要在开发者服务器后台调用 api,以code换取 用户唯一标识openid 和 会话密钥session_key。之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。Api地址:https://api.weixi... 阅读详情

相关推荐

微信公众号支付(JSAPI)

微信公众号支付(JSAPI),JSAPI,JSAPI支付,appid ,mch_id,nonce_str ,sign,body,out_trade_no,total_fee,spbill_create_ip ,notify_url ,trade_type,openid,WeixinJSBridge.invoke,微信支付模块

江拥羡橙的博客 1万+

微信公众号-JSAPI支付(保姆级教程)

微信公众号-JSAPI支付

qq_43890604的博客 2万+

【Java必备技能五】微信支付之JSAPI方式(公众号支付)超详细实现步骤

一、JSAPI支付概述 微信官方提供了很多种支付方式,如扫码支付、JSAPI支付、H5支付、NATIVE支付等等,支付接入文档地址:https://pay.weixin.qq.com/wiki/doc/api/index.html。在这几种支付方式中,JSAPI支付应该是稍微复杂点的支付,配置以及流程相对复杂,本文总结一下JSAPI支付的详细实现步骤。 JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有: ◆ 用户在微信

weixiaohuai的博客 3384

微信支付之JSAPI支付

微信支付之jsapi支付

wg666888的博客 5791

内网环境下 OpenSSL 与 OpenSSH 安全升级实战指南:从 9.9p2 离线部署到回滚方案

本文详细介绍了内网环境下OpenSSL与OpenSSH的安全升级实战指南,重点涵盖从9.9p2版本离线部署到回滚方案的全流程。通过备份策略、动态库处理、权限修复等关键步骤,确保升级过程安全可靠,特别适合金融、政务等敏感行业的内网服务器安全加固。

weixin_30566063的博客 511

程序设计二(面向对象)_实训10_复杂类的实现_ArrayList类的实现

第1关:构造函数与析构函数的实现

2401_83406306的博客 822

微信 JSAPI 支付流程

微信支付分为5种: Jsapi支付,二维码支付,H5支付,小程序支付,App支付 Jsapi支付流程: (1) 通过oauth协议获取open_id a.第一步:用户同意授权,获取code 在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面: https:...

Yan 小铁匠 1万+

Arduino——GY39大气压、温湿度、光照模块

前几天买东西的时候买了一个GY39,这个模块集成了温湿度,大气压,海拔,光照一体,使用起来很方面。它有两种工作模式使用串口模式时需要搭配转接板,我选择了IIC模式,看一下通信协议吧,就是关于高八位和低八位的数据。看一下接线。

戚晨夕的博客 2605

前端支付杂烩 - 微信支付(H5支付、JSAPI支付、Native支付)、支付宝支付、ApplePay流程

前端支付主要是包含微信支付(H5支付、JSAPI支付、Native支付)、支付宝支付、ApplePay的大概流程以及应用,避雷点等等

Komorebi的博客 9335

matlab电偶极子源码,电偶极子的MATLAB场模拟

电偶极子周围电场电势分布的MATLAB三维模拟Matlab可以用于模拟四维场的效果,本文以电偶极子的电场和电势场为例展示MATLAB在该方面领域的应用。摘要电偶极子由一个正电荷和一个负电荷组成,其电场和空间电势分布与单电荷相比具有一些重要的特性。本文将给出电场和电势场的近似表达式。这两个量的精确表达式是复杂的,不太常用,因此 MATLAB 被采用来操作精确值和绘制三维分布的远区域, 近区域和一侧区...

weixin_35135480的博客 3150

旋转矩阵的左乘与右乘

旋转矩阵左右乘的详细讲解

qq_46619194的博客 3330

微信jsapi支付流程及代码

支付需要分两个请求来完成:第一个请求:预支付(承诺)第二个请求:支付(兑现)实际中,在小程序端编写代码,拿到第一次的响应后再发起第二次请求,用户无感。

weixin_46119253的博客 1327

深度学习&故障诊断初学者 - 学习路线

针对初学者,一头雾水,不知如何学习,本文给出了一个学习路线 Python学习 - 打好编程基础 https://www.bilibili.com/video/BV1vA411b7Rn?spm_id_from=333.337.search-card.all.click B站免费课程 学到P49 建议时长 2周 深度学习理论 - 浅浅理解神经网络 https://www.bilibili.com/video/BV1FT4y1E74V?p=41 建议时长 2周...............

m0_47410750的博客 6万+

微信公众号授权H5网站发起JSAPI支付的开发流程

一、网页授权 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 第一步:用户同意授权,获取code 第二步:JSSDK调用

qq_26015489的博客 1556

408计算机复试专业课问答汇总

408计算机复试专业课问答汇总

weixin_45930223的博客 3699

ansys非线性分析中接触类型

不分离(No Separation)‌:法向始终保持接触不分离,切向允许自由滑动,属于线性接触,适合需要法向约束、允许微小切向位移的场景,比如过盈配合的简化模拟。有摩擦(Frictional)‌:法向允许分离,切向根据用户设置的摩擦系数计算摩擦力,是工程中最符合实际机械接触的类型,绝大多数装配体分析都选择该类型。无摩擦(Frictionless)‌:法向允许接触面分离,切向无摩擦、允许自由滑动,适合模拟理想润滑的光滑接触面,图中当前选择的就是该类型。非线性接触(需要多次迭代,属于真正的非线性接触行为)‌。

qq_15963745的博客 71

微信JSAPI支付对接流程及支付接口设计

一、JSAPI支付场景及逻辑 二、开发步骤 1.设置支付目录 2.设置授权域名 3.业务流程 三、代码设计 1. 支付页面 2. Controller 3. JS调起支付 4. 工具类

涛子丶白了你一眼的博客 7643

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

微信jsapi支付流程

微信jspay支付流程 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计...

weixin_41268304的博客 378

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

必看!前端角度梳理微信支付(小程序、H5、JSAPI)流程解密

前端和后端要多沟通,有什么问题(难点)随时反馈,需要什么参数好好说,遇到观点不一致的时候千万要注意控制住情绪,切莫撕逼(.——.)。整个流程走下来,给我的体验是:小程序支付最方面(因为配置少),其次是 H5,JSAPI 支付最麻烦(文章一多半都在写它)在微信支付功能开发过程中,其实最麻烦的不是开发流程,而是他的各种配置和授权流程,为了拿到所需的参数而来回折腾。使用微信支付的前提必开通微信商户号,要使用到那种的支付方式要前需在商户平台开通(要审核)。

张宁乐的博客 4455

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

微信JSAPI支付流程

微信JSAPI支付是一种使用微信内置浏览器或微信客户端内的网页进行支付的方式。流程如下: 用户在商户的网站或应用内点击支付按钮,触发支付请求。 商户服务器收到支付请求后,向微信支付服务器发起下单请求,并将支付信息传递给微信支付服务器。 微信支付服务器收到下单请求后,会根据商户提交的信息生成支付二维码或支付链接。 商户服务器收到微信支付服务器的响应后,将支付二维码或支付链接发送给用户浏览器。...

weixin_35756373的博客 290

PHP实现微信支付(jsapi支付)流程

最近接触到一个项目,涉及到微信支付,搞微信开发这么久以来,还没搞过支付,之前也就搞过公众号发红包,感谢前辈们 的探索,我看了他们的博文,让我少走了很多弯路。

江南极客 4万+

微信支付之JSAPI支付开发流程

本文简单介绍微信JSAPI支付在直连模式下的整体开发流程。

wwwwww12432的博客 2万+

thikphp 3.2 实现微信支付(jsapi支付)流程

这里说一下微信支付(jsapi支付)流程 ,支付肯定是有订单号的、订单这一块就不多说了。 第一步:点击去支付,首先你要知道你的订单号是多少。拿着订单号,我们来处理 ,上一下代码,具体看一下 //支付选择   //先下载好微信支付sdk 、引入文件 ,配置就不 use Vendor\WxMPay; //导入 用到了命名空间 // orderNo  是 我们需要

hua950327的博客 1904

V3版 jsapi微信支付流程(Springboot)

微信支付流程总结 1.签名生成 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍 2、优快云 技术博客 3 篇 3、 学习的 vlog 视频 1 个

qq_37243341的博客 5995
上一篇: Fiddler抓包夜神模拟器
下一篇: Spring是如何解决循环依赖的?
MMP菜的一匹
博客等级 码龄10年 15粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值