微信支付开发——多种支付

2023-11-11

微信提供了好多种的支付产品,本文要讲解的是我在实际开发中用的几种:JSAPI支付、NATIVE支付(扫码支付)、H5支付、小程序支付,微信提供的各种支付方式,只要了解一种,其他几种支付差别不大。

                                 

其中不管是哪种支付,都需要调用统一的一个接口:微信支付统一下单接口:

                                

支付流程:

  1. 首先用户在应用程序中进行下单(也就是点击支付)的请求
  2. 此时会请求到后台,并且在后台中进行下订单,生成订单号等处理
  3. 后台去调用微信的统一下单接口API,此时会传入一系列的参数
  4. 微信会返回给我们一些参数,以及交易的链接等信息
  5. 后台会将这些返回的信息,返回给前端,前端根据交易的链接或者其他的信息生成支付的二维码或者是调起微信的支付,输入密码即可完成支付。
  6. 用户支付成功后,会进行异步的通知,微信向配置的回调地址发送支付结果,或者是我们也可以主动调用查询支付结果的API接口,查询支付状态。

这就是不管哪种支付都需要用到的支付流程,只不过每种支付有一些细微的差别而已。下面针对每种支付着重讲一下支付之前的相关配置,以及我支付的时候需要的一些问题,其中比较麻烦的就是JSAPI支付。

JSAPI支付:

一、在进行支付之前需要先配置各种参数来保证支付成功,其中JSAPI支付尤为麻烦:

  1. 在微信支付商户后台配置关联公众号的appId,产品中心——AppID账号管理——点击关联APPID将同一品牌的公众号的appId添加并提交。此时关联状态是“审核中”

                                  

  2. 在微信支付商户后台中进行“开发配置”,配置支付的回调地址或者支付域名,JSAPI支付就需要配置支付域名,支付域名可配置多个。产品中心——开发配置。

                               

 

  3. 配置的关联公众号的AppId,需要登陆公众号管理后台先同意小程序关联到公众号的请求。

  4. 因为JSAPI支付需要先授权,所以需要配置网页授权域名,开发JSAPI支付时,在统一下单接口中要求必传用户openid,而获取openid则需要您在公众平台设置获取openid的域名,只有被设置过的域名才是一个有效的获取openid的域名,否则将获取失败。

                                     

     

                                         

       此时需要将txt文件下载,并放到开发的服务器上,需要能够外网根据域名能够访问到才可以,才能点击“确认”,否则不能点击。到此JSAPI支付,需要的所有配置全部配置完成。

二、用户同意授权,获取code,此时使用的是“静默授权”用户无感知的授权。

链接:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

      参数:appid:公众号的唯一标识

                redirect_uri:重定向的url,就是授权后要跳转的页面

                scope:应用授权作用域

                snsapi_base:不弹出授权页面,直接跳转,只能获取用户openid

                snsapi_userinfo:弹出授权页面,可通过openid拿到昵称、性别、所在地

                state:重定向后带的参数

                静默授权后会产生一个code,只有5分钟时间的有效期。

 

三、JSAPI支付的需要用到OpenId,所以在调用“统一下单”接口之前需要获取OpenId的值,通过上一步的code来换取access_token同时也就获得了openId:

链接:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

       请求参数:APPID,SECRET,CODE,

       需要注意:APPID和SECRET都是微信公众号的ID和密码,而不是商户后台的ID和密码。

四、获取到OpenId就可以调用“统一下单”接口

微信提供API的地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

链接

        URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder

        URL地址:https://api2.mch.weixin.qq.com/pay/unifiedorder(备用域名)见跨城冗灾方案

        是否需要证书:否

        请求参数:

                               

                               

                                

                                

                                

微信统一下单接口的返回参数,详细的请见文档。

我此处使用的是微信官方文档给出的SDK和DEMO的下载,直接下载后放入到项目中,里面已经封装好的一些方法,也正是因为用微信官方文档的SDK,有一些隐藏的问题没有发现,导致后来JSAPI的支付调试了好长时间才调起成功。

 问题

   一、在调起支付的时候,一直报“支付验证签名失败”问题?

                                                          

原因:我使用的是微信官方文档自带的SDK与DEMO,在生成签名的时候也使用默认的生成了签名,没有在重新生成签名,导致没有“时间戳timeStamp”的字段,生成签名的Map里面的值也比正常的多,最后导致“支付验证签名失败”。

解决:前端需要根据后端传递的sign签名,在进行“二次签名”去调起微信的支付,所以就需要保持后端在生成签名的时候,需要的字段以及字段的命名都是一致的,才可以“验证签名成功”。

例如:前端使用如下的方式调起支付那么后端生成签名的时候也是需要这些参数,并且是区分大小写的来生成签名

                                         

            后端:生成签名,其中timeStamp需要的是10位的时间戳

                                         

到此:前后端的签名才验证成功,JSAPI即可成功调起支付。

 

H5支付、NATIVE支付:

一、配置时,H5支付配置上支付域名、NATIVE支付配置上支付回调即可。产品中心——开发配置中设置

                               

二、调用“统一下单”接口

H5支付:调用统一下单接口时,交易类型trade_type=MWEB即可,此时会返回一系列的参数,前端会用这些参数去调起支付,之后用户只需要输入密码,即可完成支付。

返回的参数:

                            

                            其中mweb_url 就是H5支付返回给前端的路径,前端做处理调起支付即可。

NATIVE支付:调用统一下单接口时,交易类型trade_type=NATIVE即可。

返回的参数:

                            

                            其中code_url就是NATIVE支付返回给前端的二维码图片,展示后直接扫码支付即可。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信支付开发——多种支付 的相关文章

  • Java 中的 XPath 节点集

    我在 eclipse 中有这段代码 NodeSet nodes NodeSet xPath evaluate expression inputSource XPathConstants NODESET 它给我 NodeSet 上的编译时错误
  • 我需要在 Spring 中检查每个控制器中的有效会话吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设在 Spring Mvc 的 Web 应用程序中 我们是否需要检查每个控制器或 jsps 中的有效会话 我该如何解决 MVC 中的
  • JNI 不满意链接错误

    我想创建一个简单的 JNI 层 我使用Visual studio 2008创建了一个dll Win 32控制台应用程序项目类型 带有DLL作为选项 当我调用本机方法时 出现此异常 Exception occurred during even
  • 如何查找 Android 设备中的所有文件并将它们放入列表中?

    我正在寻求帮助来列出 Android 外部存储设备中的所有文件 我想查找所有文件夹 包括主文件夹的子文件夹 有办法吗 我已经做了一个基本的工作 但我仍然没有得到想要的结果 这不起作用 这是我的代码 File files array file
  • 在浏览器中点击应用程序时播放框架挂起

    我正在 Play 中运行一个应用程序activator run 也许 5 次中有 3 次 它会挂起 当我去http localhost 9000 它就永远坐在那里旋转 我看到很多promise timed out错误也 我应该去哪里寻找这个
  • java.io.IOException: %1 不是有效的 Win32 应用程序

    我正在尝试对 XML 文档进行数字签名 为此我有两个选择 有一个由爱沙尼亚认证中心为程序员创建的库 还有一个由银行制作的运行 Java 代码的脚本 如果使用官方 认证中心 库 那么一切都会像魅力一样进行一些调整 但是当涉及到银行脚本时 它会
  • java中删除字符串中的特殊字符?

    如何删除字符串中除 之外的特殊字符 现在我用 replaceAll w s 它删除了所有特殊字符 但我想保留 谁能告诉我我该怎么办 Use replaceAll w s 我所做的是将下划线和连字符添加到正则表达式中 我添加了一个 连字符之前
  • 一种使用 Java Robot API 和 Selenium WebDriver by Java 进行文件上传的解决方案

    我看到很多人在使用 Selenium WebDriver 的测试环境中上传文件时遇到问题 我使用 selenium WebDriver 和 java 也遇到了同样的问题 我终于找到了解决方案 所以我将其发布在这里希望对其他人有所帮助 当我需
  • Microsoft Graph 身份验证 - 委派权限

    我可以使用 Microsoft Graph 访问资源无需用户即可访问 https developer microsoft com en us graph docs concepts auth v2 service 但是 此方法不允许我访问需
  • 无法理解 Java 地图条目集

    我正在看一个 java 刽子手游戏 https github com leleah EvilHangman blob master EvilHangman java https github com leleah EvilHangman b
  • 反思 Groovy 脚本中声明的函数

    有没有一种方法可以获取 Groovy 脚本中声明的函数的反射数据 该脚本已通过GroovyShell目的 具体来说 我想枚举脚本中的函数并访问附加到它们的注释 Put this到 Groovy 脚本的最后一行 它将作为脚本的返回值 a la
  • Java中未绑定通配符泛型的用途和要点是什么?

    我不明白未绑定通配符泛型有什么用 具有上限的绑定通配符泛型 stuff for Object item stuff System out println item Since PrintStream println 可以处理所有引用类型 通
  • 使用 SAX 进行 XML 解析 |如何处理特殊字符?

    我们有一个 JAVA 应用程序 可以从 SAP 系统中提取数据 解析数据并呈现给用户 使用 SAP JCo 连接器提取数据 最近我们抛出了一个异常 org xml sax SAXParseException 字符引用 是无效的 XML 字符
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • 如何测试 spring-security-oauth2 资源服务器安全性?

    随着 Spring Security 4 的发布改进了对测试的支持 http docs spring io spring security site docs 4 0 x reference htmlsingle test我想更新我当前的
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的
  • Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?

    我正在生成 Rest 端点 包括添加OpenAPI Swagger对生成的代码进行注释 虽然它对于基本类型运行得很好 但我在自定义类方面遇到了一些问题 现在我有很多自定义类的重复架构条目 使用 Schema 实现 MyClass class

随机推荐

  • C++之拷贝构造、拷贝赋值

    拷贝构造 class Stu public int no string name int age public Stu int no 10086 string name jin int age 18 no no name name age
  • springboot+mybatis-plus+双数据源

    springboot mybaits plus mybatis plus的双数据源和逆向工程的配置整合 废话不多说直接开始干 mybatis plus逆向工程的配置 public class CodeGenerator Project pa
  • JVM、GC和常用命令

    这是11月份的一个分享 借着组内分享的机会 重新梳理了一遍JVM的一些基本概念和学习资料 在这个PPT中 关于G1的部分比较粗略 最近正在恶补G1的知识 后面可能会单独整理一篇分享出来 需要原件的 可以在我的公众号 duqi Voice 后
  • 【头歌】Linux Linux从入门到精通

    https www educoder net paths 43 第1关 Linux初体验 bin bash 在以下部分写出完成任务的命令 begin cd ls a end 第2关 Linux常用命令 bin bash 在以下部分写出完成任
  • linux ping命令参数说明及使用

    一 参数说明 在控制台输入ping会有参数说明 BusyBox v1 22 1 2019 07 23 15 07 27 CST multi call binary Usage ping OPTIONS HOST Send ICMP ECHO
  • 2018 年,关于深度学习的 10 个预测

    我有一种预感 2018年 所有的事情都会发生巨变 我们在2017年看到的深度学习取得的惊人突破将会以一种强大的方式延续到2018年 2017年在深度学习领域的研究成果将会应用于日常的软件应用中 下面是我对2018年深度学习的10个预测 1
  • 抓取chrome所有版本密码

    文章首发先知社区 https xz aliyun com t 9752 工具已上传到github https github com SD XD Catch Browser 谷歌浏览器存储密码的方式 在使用谷歌浏览器时 如果我们输入某个网站的
  • python 无头模式 绕过检测_python爬虫反反爬虫有绝技,轻松绕开百度人机验证!...

    你可能已经了解到了无头浏览器的作用以及使用的方法 那么本篇文章就让我们一起用无头浏览器做点事情 是的你没有看错 我们要 搞 的对象就是百度指数这个网站 不知道你平时是否会应用到这里面的数据呢 今天的主要目标就是使用无头浏览器登录百度指数网站
  • 离散傅里叶变换MATLAB实现

    文章目录 要求 一 连续函数抽样 二 抽样长度确定 三 DFT 1 使用一次循环实现DFT 2 使用矩阵实现DFT 总结 要求 有一单频信号y t sin 2 ft 其中f 100Hz 和f 500Hz 分别用DFT求y t 的谱 抽样频率
  • 某中学校校园网络方案设计(课程设计)

    目录 一 绪论 1 1 中小学校园信息化应用的现状 1 2 中小学校园网络系统现状 二 需求分析 2 1 获取需求的途径 方法 过程等 2 2基本情况 2 3 建筑分布 2 4 信息点 需联网的设备 分布及数量 表格 三 设计 3 1 设计
  • cesium for ue5中actor的cesium georeference组件的改变(英文教程文档是更新了的)

    今天 重新回顾下cesium for ue的教程 actor添加cesium georeference组件 发现在ue5中 没有这个组件了 忍住卸载ue5 重新安装ue4 27的冲动 cesium的组件数量增多了 反而功能减少了 不可能 绝
  • Unity之UI

    Unity之UGUI 一 Canvas 1 创建Canvas 2 Render Mode 1 Screen Space Overlay 2 Screen Space Camera 3 World Space 3 Pixel Perfect
  • 【计算机毕设项目】基于大数据的社交平台数据爬虫舆情分析可视化系统

    文章目录 0 前言 1 课题背景 2 实现效果 实现功能 可视化统计 web模块界面展示 3 LDA模型 4 情感分析方法 预处理 特征提取 特征选择 分类器选择 实验 5 部分核心代码 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不
  • python智能合约编程_如何用Python Flask开发以太坊智能合约

    将数据存储在数据库中是任何软件应用程序不可或缺的一部分 无论如何控制该数据库都有一个该数据的主控 区块链技术将数据存储到区块链网络内的区块中 因此 只要某个节点与网络同步 它们就会获得区块中数据的副本 因此 该技术中没有特定的数据主控 在本
  • C#学习教程八

    枚举 枚举是C 编程语言的一种类型 跟类 结构 密封类 分布类 委托 事件 抽象都是同一级别的类型 枚举用enum关健字来定义 枚举可以一次性定义一组常量和常量的使用方式一样 枚举通常用在分支语句中 这种做法可以增加程序的可读性 枚举中的每
  • 如何查看和修改linux系统的字符集

    查看系统的字符集 通过locale命令查看系统支持的字符集 这个是很干净的一个系统 root master locale a C en US utf8 POSIX 还有这种对字符集支持比较好的 root master yt locale a
  • lock锁

    目录 1 lock 基本用法 2 lock公平锁与非公平锁 3 lock注意事项 4 synchronized 与 lock区别 1 lock 基本用法 lock lock try finally lock unlock 或者 try lo
  • Vue中element组件Pagination跳转到第二页后搜索功能失效

    在写组件分页功能遇到一个bug 当点击到除第一页以外 搜索功能失效 解决方法是在搜索函数中加上this page 1 如果搜索是空值显示数据 searchKeyFun2 value this page 1 设置搜索页面到第一页 this s
  • 18.1. Fabric2.2 区块链农产品溯源系统 - 多Peer部署(扩展)

    这是一篇后补文章 看时间大家能够看出来 通过前面的学习 大家知道如何增加组织 如何部署多Orderer 本节介绍如何在一个组织内部署多个Peer节点 本节是基于上一节操作的继续 脚本也是基于上节进行修改的 1 目标 为组织1新增一个节点 p
  • 微信支付开发——多种支付

    微信提供了好多种的支付产品 本文要讲解的是我在实际开发中用的几种 JSAPI支付 NATIVE支付 扫码支付 H5支付 小程序支付 微信提供的各种支付方式 只要了解一种 其他几种支付差别不大 其中不管是哪种支付 都需要调用统一的一个接口 微