• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >微信公众号 > 微信公众号支付开发全过程

微信公众号支付开发全过程

作者:匿名 字体:[增加 减小] 来源:互联网

匿名通过本文主要向大家介绍了微信公众号等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
业务流程

这个微信官网说的还是很详细的,还配了图。我还要再说一遍。

用户点击一个支付按钮-->{后台一大推处理}-->用户看到了一个输入密码的界面,包含金额等一些信息-->用户输入密码后出来一个支付成功的页面(这部分流程都是微信自己完成的,我们什么都不用做)-->返回系统自己的页面(总不能让用户一直看着一个支付完成的页面吧。花了钱,正心疼的,赶紧跳转啊~一会后悔了,申请退款怎么整。可怜的工程师还得开发退款功能)

开发流程

1)获取用户授权(这个做不做没有啥关系,反正我还没做呢)

2)调用统一下单接口获取预支付id

3)H5调起微信支付的内置JS

4)支付完成后,微信回调URL的处理

看着大段的文字,是不是很不爽。忘记了在哪里看到的一句话。One picture instead thousands of words. (图中红色部分是我们需要做的。好像也没有多少

微信公众号支付开发全过程

本文最主要的部分开始了(想直接看代码,贴上代码,你也不一定能看懂,不是说代码难,各种分离,各种类,不直接。看懂了,不一定能调试通。最后一个签名错误,或者$get_brand_wcpay_request:fail.$key0 还是得回来乖乖的对参数。)最近学习英语有点魔怔了。各种插入语。不懂什么梗的,可略过。朋友一直说我的笑点和别人不一样。文后会讲个笑话。

1、生成统一下单接口,获取prepay_id.

需要的参数 ==名称==从哪里找到他们:

微信官方给了个参数的详细说明。https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 部分参数,仍然不知道哪里找的小伙伴们请继续向下看

appid ==应用ID==登陆微信公众号后台-开发-基本配置

mch_id == 微信支付商户号==登陆微信支付后台,即可看到

device_info==设备号==终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB"

body==商品描述==商品或支付单简要描述(不知道是什么鬼,没关系,先随便传个字符串,随便的传个英文的字符串。你会为你这个时候的英明决定打个满分。如果是中文,可能会遇到毫无头绪的签名错误,严重者开始怀疑人生)

trade_type==交易类型==取值如下:JSAPI,NATIVE,APP。我们这里使用的JSAPI。标题已经说了,是微信公众号支付。

      ps:JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付,统一下单接口trade_type的传参可参考这里。MICROPAY--刷卡支付,刷卡支付有单独的支付接口,不调用统一下单接口

nonce_str==随机字符串==随机字符串,不长于32位

      ps:小伙伴们可能会对nonce这个命名,很诧异,微信team的人,都是逗必吗~。查了一下百科,随机数也用nonce表示。瞬间伤害满满的。(好奇的宝宝可用剑桥词典查一下nonce的意思)。在我的不懈努力下,

      发现了这个。nonce ==number used once.恍然大悟的赶脚。

notify_url==通知地址==接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。(这,起个什么名字好呢。随便起吧,反正一时半会也用不到)

out_trade_no==商户订单号==商户系统内部的订单号,32个字符内、可包含字母(每次看完微信的官方解释就更迷茫了,有木有。没关系,我就传个1咋了。)

total_fee==总金额==订单总金额,单位为分(为了公司的项目测试,还得自己掏银子,1分钱也是钱啊。ps:这个时候总会想起,一个同学说过,苍蝇腿也是肉啊)

openid==用户标识==trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。

还有最最重要的一个,重要的角色总要在最后登场。

sign==签名==官方给的签名算法。https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3。没有看懂,看不太懂,你觉得你看懂了,没关系,不遇到几次签名错误,好意思说自己做过微信支付开发吗。

说道这个sign还有一个更重要的参数。参与签名的参数。反正我是找了好久才找到。(公司运营申请的微信支付,当我找她要的时候,他的表情是这样子的。

key==key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置

在这里:微信公众号支付开发全过程

网上有说怎么找得。我也懒得去找。直接自己想了一个字符串,然后用MD5加密成32位的字符串,重新设置的。

生成sign签名的时候,要用到这个key值,所以,要保存好。

我看别人生成签名(sign)用了很多,反正我就用了上面给出的那些参数生成的sign.(这个上面指的是我的博客上面,不是微信上面。为了减少误解,贴出我生成sign签名的参数)

我生成sign签名的参数

微信公众号支付开发全过程

准备好以上参数之后,封装成XML

格式如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><xml>
    <appid>wxb1427ebebexxxxxx</appid>
    <body>XXX费用</body>
    <device_info>WEB</device_info>
    <mch_id>132186xxxx</mch_id>
    <nonce_str>6AED000AF86A084F9CB0264161E29DD3</nonce_str>
    <notify_url>https://一个域名/api/wechatPay/jsapiPayNotify</notify_url>
    <openid>oo8WUt0taCqjt552htW1vw-xxxxx</openid>
    <out_trade_no>1</out_trade_no>
    <sign>各种排序+key生成的那个sign</sign>
    <total_fee>1</total_fee>
    <trade_type>JSAPI</trade_type></xml>

调用微信的统一下单地址:https://api.mch.weixin.qq.com/pay/unifiedorder

见证奇迹的时刻。如果以上参数都神奇的对了,那么会收到微信返回的XML字符串,格式如下

<xml>
  <return_code><![CDATA[SUCCESS]]></return_code>
  <return_msg><![CDATA[OK]]></return_msg>
  <appid><![CDATA[wxb1427ebebexxxxxx]]></appid>
  <mch_id><![CDATA[132186xxxx]]></mch_id>
  <device_info><![CDATA[WEB]]></device_info>
  <nonce_str><![CDATA[Hh4LFHUUvtDYtNdp]]></nonce_str>
  <sign><![CDATA[079F8A915FD3044F4A17D75F4945E955]]></sign>
  <result_code><![CDATA[SUCCESS]]></result_code>
  <prepay_id><![CDATA[wx20160617155030d9e6a0e48b0533061255]]></prepay_id>
  <trade_type><![CDATA[JSAPI]]></trade_type></xml>


我们需要的,就是这货

prepay_id

获取到这货之后,第一步骤已经结束了,可以去喝个茶,吃个冰棍,小庆祝一下。

2、H5调起微信支付的内置JS

后台传回前台的参数中,应包含以下几项:

appId==这个是不变的==永远不变

timeStamp==时间戳==规则:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_2。看完仍是一脸迷茫的,没关系,我们有工具类。谁知道呢,直接调用就好了

nonceStr ==反正我用的跟刚才签名是同一个随机字符串。理论上不用应该也没有关系的,勤快的小伙伴可以试试

package==订单详情扩展字符串==统一下单接口返回的prepay_id参数值,提交格式如:prepay_id=***(你猜对了。刚才我们费那么大力气,获得到的prepay_id就是在这里用的。第一次使用的时候,一直拿订单ID去请求,然后微信给我的信息就是请求参数错误,缺少参数$key0$.不要告诉我,只有我一个人。)

signType==签名方式==签名算法,暂支持MD5

paySign==签名==这个签名,要重新生成,在后台。使用如上4个参数+一个key(永远不变)。(我生成签名的时间戳和传回给前台的时间戳就是timeStamp是同一个。不一样行不行,木有验证)

生成paySign的代码

微信公众号支付开发全过程

NB:生成prepay_id时appid是小写的i,生成paySign时,appId是大写的I

到此为止如果一切顺利,你会看到这样子的一个页面。

但是如果,你没有看到这个。而是提示,目录未授权,或者测试账号未在白名单中,我觉得,这才是这篇博客的正确打开方式呢。

微信公众号后台,微信支付,开发配置中有一个支付授权目录,测试授权目录,

支付授权目录:开发时,先放一放。(邓小平爷爷在对待中日关系时曾经说过,我们解决不了的问题,先放一放。)

测试授权目录:我们要填写的就是这个了。要一个外网能访问到的地址。ip也可以(亲测可以的)。如果你的ip,外网不能访问,找运维同学解决。建议,配置一个测试用的外网可访问的域名。

测试白名单:这个不解释

微信公众号支付开
<script async src=

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 有关关键字回复的文章推荐10篇
  • 微信JS-SDK之图像接口开发
  • 关于微信小程序上传word、txt、Excel、PPT等文件的详解
  • .NET微信公众号获取OpenID和用户信息实例解析
  • C#开发微信门户及应用在管理系统中同步微信用户分组信息
  • .Net微信开发之如何解决access_token过期问题解决办法
  • C#开发微信门户及应用-使用语音处理
  • php微信公众平台开发回复功能实例代码
  • 微信开发-Jssdk调用分享实例
  • C#微信开发系列-启用开发者模式

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • java微信开发API服务器接入详解
    • 分享微信开发Html5轻游戏中的几个坑
    • 关于微信自定义分享功能的实现代码
    • Thinkphp整合微信支付功能详解
    • 微信开发之调起摄像头、本地展示图片、上传下载图片方法
    • 三步教你接入微信公众平台开发
    • 微信开发协议总结说明
    • 微信开发html5轻游戏中的几个坑
    • 详解php微信公众平台开发验证步骤实例代码
    • java微信开发API微信自定义个性化菜单实现实例代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有