【微信公众号开发】八、微信JS发起支付

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

重要声明:本文章仅仅代表了作者个人对此观点的理解和表述。读者请查阅时持自己的意见进行讨论。

目录

本系列博文还包含了下面的博客:

  1. 【微信公众号开发】一、运作及配置流程简介
  2. 【微信公众号开发】二、解析微信请求及响应消息
  3. 【微信公众号开发】三、解析微信事件XML数据消息及响应
  4. 【微信公众号开发】四、公众号按钮设置及自己的微信按钮编辑器
  5. 【微信公众号开发】五、微信网页授权获取用户openId
  6. 【微信公众号开发】六、微信JS的使用
  7. 【微信公众号开发】七、微信JS需要注意的坑
  8. 【微信公众号开发】八、微信JS发起支付(本文)

对于微信JS支付,如果你之前没有对接过相关开发,你可能理解起来有一点困难。为了明白这些开发起了什么作用,必须要先弄清楚微信支付的业务流程,才能理解开发的目的。

一、支付业务流程

就和我们在商店里面购物一样,我们先要有一个商品,然后拿着这个商品去支付。而在互联网上,我们先要有订单,然后支付是为这个订单进行支付。常常自己的业务系统里面有一个自己的订单系统,当我们要为自己的订单系统中某订单进行支付时,微信可不知道我们自己的订单系统是如何运转的,所以要在微信中使用微信进行支付,必须要先创建一个微信系统里面的订单,创建微信系统里面的订单时,是支持指定一部分自定义数据的,如果把这个自定义数据填写为自己的订单系统里面的标识符,这样就可根据这个自定义数据确定我们自己的订单是否支付了。

通常来说,创建一个微信系统中的订单,这个操作称之为:“统一下单”。然后我们支付时其实就是在为这个下好的单进行支付。下面来开一张业务流程图:

支付业务流程

现在你大体上知道了业务流程,所以开发起来疑问就会少很多。虽然流程看起来的却简单了,但实际上总是会遇到各种问题。这张图忽略了一个很重要的元素,那就是“商户”这个概念,下面我们来说说商户。

1、商户

微信公众号实际上是不具备收款功能的,支持收款的是微信商户,而微信商户上可以绑定多个微信公众号,在这些公众号里面进行的所有支付,钱其实最终都跑到商户上去了。所以,如果你要做支付功能,先要必须由一个商户,才能继续下去,单纯一个公众号想用微信支付是不行的。创建和管理商户你都可以到微信官方商户地址去了解详细信息。

二、开始开发

通过上述流程图,你可知道,要支付前,先要进行统一下单,而统一下单这个操作是需要比较高的权限的,通常都是在后台调用微信的下单接口,而不会直接在前端进行统一下单。意味着我们需要将这个统一下单接口在我们自己的后台系统里封装一遍,暴露给自己的业务前端调用。

1、统一下单

由于支付最终是把钱支付到商户里面的,因此统一下单接口的参数和格式都和微信其他的接口(比如设置微信菜单接口)不太一样。

接口地址:

统一下单接口地址:"https://api.mch.weixin.qq.com/pay/unifiedorder"

请求方式

POST

请求参数

统一下单接口的参数是一个xml数据,不是json数据了,所以不能用平时常用的请求了。这是一个示列请求参数:

<xml>
   <appid>wx242*****c43b</appid>
   <attach>支付测试</attach>
   <body>JSAPI支付测试</body>
   <mch_id>10000100</mch_id>
   <detail><![CDATA[{ "goods_detail":[ { "goods_id":"iphone6s_16G", "wxpay_goods_id":"1001", "goods_name":"iPhone6s 16G", "quantity":1, "price":528800, "goods_category":"123456", "body":"苹果手机" }, { "goods_id":"iphone6s_32G", "wxpay_goods_id":"1002", "goods_name":"iPhone6s 32G", "quantity":1, "price":608800, "goods_category":"123789", "body":"苹果手机" } ] }]]></detail>
   <nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>
   <notify_url>http://xxxxx/pub_v2/pay/notify.v2.php</notify_url>
   <openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>
   <out_trade_no>1415659990</out_trade_no>
   <spbill_create_ip>14.23.150.211</spbill_create_ip>
   <total_fee>1</total_fee>
   <trade_type>JSAPI</trade_type>
   <sign>0CB01533B8C1EF103065174F50BCA001</sign>
</xml>

此接口的参数较多,建议到这里查看详细的参数说明。

2、封装支付参数

当你下单完成后,你就可以在前端调起支付方法引导用户进行支付了。不过为了安全着想,可不是简单的随便一调用,支付界面就弹出来了。

要成功调起支付弹窗,需要一些加密参数,这些参数来自于上一步下单成功的微信订单。当你下单成功后,你需要把这些字段封装好并返还给前端:

timestamp: 后端生成一个当前时间戳(单位[秒])。
nonceStr: 随机字符串,32位及以内的长度。
package:一段描述信息,格式:prepay_id=****。其中****表示统一下单成功得到的 prepay_id 值
signType: 加签格式
paySign: 加签结果

前端通过 wx.chooseWXPay 方法,传入以上参数才可以正常进行支付。而对于以上参数,需要通过后端把值全部计算出来。后端的大致实现流程就像这样(下面是伪代码):

// 第一步、统一下单:
orderResult = post("https://api.mch.weixin.qq.com/pay/unifiedorder", "<xml>....</xml>");

// 第二步、根据下单结果封装前端需要的参数
timestamp = System.now();
nonceStr  = String.randomStr();
package   = "prepay_id=" + orderResult.prepay_id;
signType  = "MD5";

// 生成签名,这个签名使用MD5进行,待签名的各个参数必须按参数名的 ASCII 严格排序。
// 这里涉及了一些更多的参数:
// appId: 公众号的appId
// timeStamp: 就是 上面的时间戳,不过要特别小心,这里的S是大写的,不能是小写的。
// key:是公众号绑定的商户里面的key值。
paySign   = MD5("appId=" + appId + "&nonceStr=" + noncestr + "&package=" + packagestr + "&signType=" + singType + "&timeStamp=" + timestamp + "&key=" + key).toUpperCase();

// 第三步、将封装好的数据返回给前端
response.write({
    timestamp: timestamp,
    nonceStr: nonceStr,
    "package": package,
    signType: signType,
    paySign: paySign
});
3、js发起支付及注意

当前端顺利的拿到统一下单返回并封装好的支付参数时,就可以发起支付了。

wx.chooseWXPay({
    timestamp: timestamp,
    nonceStr: nonceStr,
    "package": package,
    signType: signType,
    paySign: paySign
});

要特别注意,由于支付对安全级别要求比较高,如果这里没有弹出支付窗口,还有必要检查一下商户后台,支付网页所在的目录必须配置到商户后端的支付目录里面,否则也是无法支付的。而对于配置方法,传统html页面十分简单,你的网页在哪个目录,你就配置你对应的目录就好了,而如果你是单页面应用,就应该根据不同路由模式填写了,如果是history模式,则和传统配置相同,如果是hash模式:

  1. 对于页面https://www.microanswer.cn/#/product如果要进行支付,则你应该配置:https://www.microanswer.cn/#/。
  2. 对于页面https://www.microanswer.cn/index.html#/product如果要进行支付,则你应该配置:
    https://www.microanswer.cn/index.html#/。
  3. 如果你的页面里有些url即有index.html,有些又只有一个单独的#,那你就干脆把:
    https://www.microanswer.cn/、https://www.microanswer.cn/#/、https://www.microanswer.cn/index.html#/全部配上去。

注意以上域名仅做示列,自己配置时要根据自己的域名来。

三、总结

微信支付其实理解了流程后不难开发,只要保证:统一下单正确、支付参数封装正确、公账号绑定的商户正确、商户后台支付目录配置正确基本上就不会出现问题了。

微信公众号支付开发流程总结 近期负责的一个微信直销项目,需要用到公众号支付功能。该项目是从微信公众号引导客户进入H5页面选购产品、下单支付,要在网页端调起支付API(即在微信浏览器里面打开H5网页中执行JS调起支付)。小编在开发过程中踩过不少坑,也花费了不少时间,所以有必要做个简单的总结,为以后类似业务的开发积累经验。 阅读详情

相关推荐

Django微信公众号开发(二)公众号内微信支付

前言   微信公众号开发又一重要项就是微信支付,如何在微信公众号中或者微信自带的浏览器中实现微信支付呢?这就是本文的目的。   对于微信支付有几种分类,一种是app支付(顾名思义给予一些软件app使用的)、微信内H5支付(什么意思呢,就是微信内置的浏览器自带了一些js、css文件,当然是微信特有的,上篇博客有讲过,获取到的用户昵称带表情会乱码,在微信自带的浏览器你只要将它装换为utf-...

youand_me的博客 3278

微信jsapi支付详解

JSBridge,一个js桥帮助H5和Native之间的通信,因为js是运行在一个js容器里,与原生运行环境隔离,所以需要这种机制来实现这两个的双向通信。第二步:获取到微信支付弹窗的参数:如appId,时间戳,随机窜,微信签名方式,微信签名。前提配置:公众号要设置好支付域名,网页授权域名,企业账号,商户号,开通jsapi支付权限。首先:需要先判断环境,如果不是微信环境下就切换成H5浏览器环境下支付。第一步:我这边是要通过微信code发送请求给后端获取唤起微信弹窗参数。第三步:唤起支付弹窗。

dghgjuyhuoyho的博客 3161

微信公众号网页支付开发

   最近做的游戏公众号项目需要实现在微信公众号网页进行支付,虽然是一个小的功能,初次接触支付还是犯了很多错误,在此记录一下大体的开发流程。 准备工作 第一步:申请微信商户号,配置JSAPI支付授权目录(注:发起支付的前端页面所在的请求目录,去掉最后一个/后面内容): 例如我的支付页面请求路径是http://www.xxxxx.com/wxpay/jsPay/getPayPage, 需要...

四十二度科技 1979

微信jsapi支付V3保姆级流程

微信jsapi支付保姆级流程

weixin_67210784的博客 8369

微信公众号支付(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万+

微信公众号 - 最新详细实现H5网页接入微信支付功能,开发移动端、PC端网站集成使用微信支付流程及示例代码,公众号网页利用JS-SDK/JSAPI/H5支付授权唤起微信支付,可脱离微信环境支付或内置浏

微信公众号,微信支付,网页,移动端,h5,扫码支付,二维码付款,手机网页,电脑pc网页生成支付二维码,js-sdk,jsapi,外部浏览器调起微信支付,脱离微信环境,在微信内置浏览器如何进行微信支付,前端H5微信支付,web网站,vue2,vue3,nuxt2,nuxt3,jquery,微信公众号h5支付流程,如何实现,怎么做,回调报错,redirect_uri参数错误,必须部署才能调试吗,怎么不打包发布就能在本机测试,微信H5支付能力,uniapp微信支付,h5页面调起支付,支付没反应,无效,失败,H5页

🏆 前端领域优质创作者 6103

微信JSAPI支付流程

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

weixin_42612804的博客 635

新手必看:如何用T265和ROS实现无人机室内精准定位(附PX4参数配置)

本文详细介绍了如何使用Intel Realsense T265和ROS实现无人机室内精准定位,包括硬件准备、ROS数据流架构设计、PX4参数配置及系统验证。特别针对视觉SLAM技术在室内环境中的应用,提供了从零搭建到进阶优化的全流程解析,适合无人机开发新手快速上手。

weixin_30642561的博客 404

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

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

qq_26015489的博客 1556

华大 HC32F460 DMA数据传输实战:从配置到中断处理的完整指南

本文提供了华大半导体HC32F460微控制器DMA(直接内存访问)功能的完整实战指南。详细解析了DMA的配置流程、中断处理机制以及软件与硬件触发方式,并附有实验代码示例。通过合理使用DMA进行数据传输,可以显著解放CPU资源,提升嵌入式系统的实时性与运行效率。

weixin_29194255的博客 255

语义分割系列7-Attention Unet(pytorch实现)

本文介绍了AttentionUnet模型和其主要中心思想,并在pytorch框架上构建了Attention Unet模型,构建了Attention gate模块,在数据集Camvid上进行复现。

yumaomi的博客 2万+

微信内置浏览器调用微信 JS-SDK 调用微信支付和微信外部浏览器h5支付

微信内置浏览器调用微信 JS-SDK 调用微信支付和微信外部浏览器h5支付

chengcheng9876的博客 2783

STM32无线遥控小车的设计

基于SPI通信的无线摇杆小车的设计

weixin_69414084的博客 2928

微信支付之微信公众号网页支付(各种总结)

微信支付除了坑,就是坑!!! 网上也还是好多吐槽的,各种签名问题,文档也比较乱。重点是,安卓最后报错就只报chooseWXPay failed。什么具体错误也不显示。最后还是喊朋友的苹果机远程帮忙测试(苹果机会返回错误信息)。 一:签名问题 微信网页支付。需要3个签名。后面2个签名的文档总连接页面,开发前一定要仔细看。https://mp.weixin.qq.com/wiki/11/74ad

花2不谢 1万+

【学习系列】SAP RAP 16:RAP应用部署集成至Fiori Launchpad 【On-Premise】

本文详细介绍了如何将开发完成的RAP应用部署到S4HANA 2023 On-Premise环境并集成到Fiori Launchpad的完整流程。主要内容包括:1)通过ADT工具创建Fiori项目并配置外部IDE(VSCode);2)使用npm命令部署应用到系统;3)通过事务代码创建语义对象、磁贴目录和目标映射;4)配置PFCG角色分配;5)补充了部署失败解决方案、翻译问题处理、自定义主题设置以及登录页面LOGO修改等内容。文章提供了step-by-step的操作指南,帮助开发者将预览模式的应用正式部署到生产

DeveloperMrMeng的博客 637

《C/C++等级考试(1~8级)历届真题解析》专栏总目录

中国电子学会《全国青少年软件编程等级考试》C/C++编程(1~8级)历届真题解析。订阅后可阅读专栏内所有真题解析,真题持续更新中!

人生就是一个不断学习的过程 2万+

微信公众号支付开发总结

微信支付文档有多坑,大家都知道,这里就不多说了。 首先说明,本文档编写日期受时间限制,不保证之后一段时间内有效。由于作者水平有限,文字功底较低,有问题可以留评论交流。 目录(可以直接选择自己想看的) 微信JS-SDK说明文档 统一下单 支付结果通知 申请退款 退款结果通知 微信支付业务流程 在开发微信支付功能之前,首先还是需要看一下它的业务流程,官方链接:https://pay.weixin

shuhaith的博客 1901

YOLOv8人工智能与深度学习——强化学习

本文介绍了将YOLOv8目标检测模型与强化学习结合的方法。主要应用包括自适应目标检测(动态调整检测参数)、主动学习(智能选择标注样本)和多目标跟踪优化。实现方案采用深度Q网络策略,通过定义状态表示、动作空间和奖励函数,使检测系统能根据环境反馈优化性能。该方法具有自适应优化、资源高效、持续改进等优势,能构建更智能的计算机视觉系统。文章详细说明了强化学习环境的构建、策略网络的实现以及训练过程,并提供了代码示例。

u010117029的博客 259

PHP微信公众号JSAPI网页支付

一、使用场景以及说明 使用场景:商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程。 说明:1.用户打开图文消息或者扫描二维码,在微信内置浏览器打开网页进行的支付。 2.商户网页前端通过使用微信提供的JSAPI,调用微信支付模块。这种方式,适合需要在商户网页进行选购下单的购买流程。 二、准备工作 公共号支付需要提前...

weixin_41804506的博客 3410

2026年紫光同创数字IC笔试试卷带答案

FPGA基础知识与设计要点摘要 本文围绕FPGA与数字IC设计核心概念,通过单选题、波形分析题、多选题和简答题形式,系统梳理了以下关键知识点: FPGA基础架构 查找表(LUT)是实现组合逻辑的基本单元(题1) CLB包含LUT、触发器和进位链,后者加速算术运算(题6,10) 布局布线优化是减少关键路径延迟的核心方法(题7) 时序分析要点 建立时间(时钟沿前数据需稳定)与保持时间(时钟沿后需保持)的定义(题2,简答1) 亚稳态成因及两级同步器处理跨时钟域信号的方法(多选题1,波形题5) 特殊设计技术 异步复

Open 114

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

微信公众号支付开发-php

微信公众号支付开发-php 一、使用背景 1、在微信公众号内,打开H5商城网站,调用微信支付控件完成支付。 2、解决测试服跟正式服同用一个公众号进行公众号支付开发 注意:微信公众号支付与H5支付的区别在于:微信公众号支付是在微信浏览器中调用微信支付控件;H5支付是在非微信浏览器中调用微信支付控件。 二、准备工作 微信公众号支付需要在微信公众平台和商户平台完成以下配置,并获取相关开发配置...

u012274155的博客 1444

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

uniapp在开发微信H5使用微信js-sdk记录

本文介绍了如何在uni-app中使用jweixin-module插件实现微信功能。该插件支持微信支付、分享、获取用户信息、扫码等功能。首先通过npm安装插件,然后在项目中封装wx-jssdk.js文件,提供初始化、支付、分享等基础方法。使用时导入封装模块,创建实例后即可调用相关功能。文中给出了具体代码示例和调用方法,并提供了微信官方文档链接供参考。

baidu_33927029的博客 1055

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

springboot公众号项目接入微信支付

在看这篇文章之前,开发者对微信公众号要有一定的了解,如果你是小白请移驾微信公众号官方开发文档 现在大多数开发者都是使用测试号进行开发,测试号开发会遇到一些坑,比如第一次获取不到code等,有经验的大佬都会说是微信那边的bug,具体什么原因我们也不深究,正是好则不会出现这些问题。 进入正题,获取用户授权这些我们都不讲了,直接去微信官方API查看,都是调相关API,很简单,只是注意一下用...

weixin_39241762的博客 1188

微信支付-微信公众号支付,微信H5支付,微信APP支付,微信扫码支付

在支付前,如果使用第三方MVC框架,则使用重写模式,服务器也需要配置该项 if (!-e $request_filename){ rewrite ^/(.*)$ /index.php/$1 last; } 微信公众号支付 1. 登录 微信公众平台; 2. 点击左边菜单里面的微信支付查看相关商户号,确定该公众号支付针对由哪个商户号进行收款; 3. 登录步骤2中的商户平台,点击...

weixin_30302609的博客 920

微信公众号微信支付设置,微信支付开发(1) JS API支付

1。公众号设置&gt;&gt;&gt;功能设置       JS接口安全域名 和 网页授权域名 添网站的主域名。不要添有子目录的的域名。 如:       www.banghui.tv (ok)        www.banghui.tv/wx (no)        对于第二种有子目录的写法,如果发出微信网页授权请求的页面不在wx目录或其子目录中。授权就会失败。    2。微信支付&...

hljqfl的专栏 423

微信支付JSAPI支付

1.介绍 JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有: ◆ 用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付 ◆ 用户的好友在朋友圈、聊天窗口等分享商家页面连接,用户点击链接打开商家页面,完成支付 ◆ 将商户页面转换成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付 ...

weixin_30522095的博客 417
上一篇: 【web】Session是什么又和cookie有啥关系
下一篇: 【Java】泛型
Microanswer
博客等级 码龄10年 38粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值