微信小程序支付功能实现全过程简析

微信小程序支付功能实现全过程简析今天小编带大家来分析一下微信小程序支付功能的实现全过程 先附一张小程序支付时序图 整体流程 在所以操作之前 我们得先有微信开发者账号 还得有自己的商户号和商品密匙 微信端请求下单之后 会调用 wx request 接口发起网络请求 服务器接收到请求之后会调用 auth code2Session 接口 换取用户唯一标识 OpenID 和会话密钥 session key 服务器端收到 openid 之后会再去调用支付统一下单接口 具体内容下文会说 返回一些数据 其中最重要的就是 prepay id 服

今天小编带大家来分析一下微信小程序支付功能的实现全过程。

整体流程:

  1. 在所以操作之前,我们得先有微信开发者账号,还得有自己的商户号和商品密匙。
  2. 微信端请求下单之后,会调用wx.request接口发起网络请求。
  3. 服务器接收到请求之后会调用auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。
  4. 服务器端收到openid之后会再去调用支付统一下单接口,具体内容下文会说。返回一些数据,其中最重要的就是prepay_id。
  5. 服务器端将调用支付统一下单接口返回的数据在进行一次数据处理之后,就会返回给微信端。
  6. 微信端收到这批数据后就可以调用wx.requestPayment接口实现支付功能。
  7. 至此,小程序支付的成功与否就由wx.requestPayment接口的成功与否了。

支付统一下单接口说明:

接口链接:https://api.mch.weixin..com/pay/unifiedorder

具体参数可以参考微信开发文档https://pay.weixin..com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1

这里我附一下代码:

 //统一下单接口编写 [HttpGet] public string pay(string openid) { 
    string url = "https://api.mch.weixin..com/pay/unifiedorder"; //创建键值对 var dic = new Dictionary<string, string> { 
    { 
   "appid", ""}, //微信appid { 
   "body","it's very good"}, //body 商品简单描述 { 
   "mch_id", ""}, //商户号  { 
   "nonce_str", "5K8264ILTKCH16CQ2502SI8ZNMTM67VS"}, //随机字符串(20) { 
   "notify_url","http://www.weixin..com/wxpay/pay.php"}, //异步通知的地址 { 
   "openid",openid}, //openid  { 
   "out_trade_no","346"}, //商户自己的订单号码 { 
   "spbill_create_ip","192.168.138.1"}, //IP地址 { 
   "total_fee","1"}, //支付多少钱 { 
   "trade_type","JSAPI" }, //交易类型 JSAPI { 
   "sign","" } //签名 }; var sb = new StringBuilder(); sb.Append(" 
   
     " 
   ); foreach (var d in dic) { 
    sb.Append("<" + d.Key + ">" + d.Value + " 
    + d.Key + ">"); } sb.Append(""); string new_sb = sb + ""; byte[] bs = Encoding.ASCII.GetBytes(new_sb); HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = bs.Length; request.GetRequestStream().Write(bs, 0, bs.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8)) { 
     return reader.ReadToEnd(); } } 

wx.requestPayment接口说明:

 wx.requestPayment({ 
    'timeStamp': '', 'nonceStr': '', 'package': '', 'signType': 'MD5', 'paySign': '', 'success':function(res){ 
    dosomething(); }, 'fail':function(res){ 
    console.log(res); } }) 

参数在服务器端返回的数据里面都包括了,只要调用一下即可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209750.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午8:30
下一篇 2026年3月19日 上午8:30


相关推荐

  • GridView 分页

    GridView 分页一 分页功能的实现 要实现 GrdView 分页的功能 操作如下 1 更改 GrdView 控件的 AllowPaging 属性为 true 2 更改 GrdView 控件的 PageSize 属性为任意数值 默认为 10 3 更改 GrdView 控件的 PageSetting gt Mode 为 Numeric 等 默认为 Numeric 该属性为分页样式 GridView 属性设置好了 从页面上也能看到分页样

    2026年3月18日
    1
  • 国内免费高匿IP代理软件

    国内免费高匿IP代理软件免费IP代理软件能快速获取代理ip资源,智能验证,一键设置取消代理。免费IP代理软件1.支持免费IP代理2.普通代理3.高匿代理4.Http代理5.Https代理6.自动验证无效代理7.一键设置取消代理8.导出到文本或Excel9.绿色免费软件。511遇见免费IP代理媒体预览https://www.bilibili.com/video/BV1ty4y1V72ehttps://v.youku.com/v_show/id_XNTE5MzgyMTU

    2022年6月16日
    129
  • phoenix 索引实践

    phoenix 索引实践

    2021年11月27日
    70
  • Vue路由传参详解(params 与 query)

    Vue路由传参详解(params 与 query)Vue 路由传参详解 params 与 query 前言 路由传参分为 params 传参与 query 传参 params 传参类似于网络请求中的 post 请求 params 传过去的参数不会显示在地址栏中 但是不能刷新 params 只能配合 name 使用 如果提供了 path params 会失效 query 传参类似于网络请求中的 get 请求 query 传过去的参数会拼接在地址栏中 name xx query 较为灵活既可以配合 path 使用 也能配合 name 使用 亲测可用

    2026年3月18日
    2
  • 股指期货跨期套利策略优化_股指期现套利策略盈亏

    股指期货跨期套利策略优化_股指期现套利策略盈亏股指期货跨期套利策略概述:本文章介绍使用同一标的不同交割日的股指期货的价差进行跨期套利的策略。本文由JoinQuant量化课堂推出,难度为进阶(下),深度为level-0。​作者:swlaw编辑

    2022年8月6日
    9
  • centos7重启apache、nginx、mysql、php-fpm命令

    centos7重启apache、nginx、mysql、php-fpm命令

    2021年10月27日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号