微信支付时序图 官方文档:

https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5

1、什么是时序图
是一种UML交互图,描述了对象之间传递消息的时间顺序, 用来表示用例中的行为顺序, 是强调消息时间顺序的交互图;
通俗解释:就是交互流程图 (把大象装冰箱分几步)
2、时序图包括四个元素 对象(Object), 生命线(Lifeline), 激活(Activation), 消息(Message);
对象:时序图中的对象在交互中扮演的角色就是对象,使用矩形将对象名称包含起来, 名称下有下划线
生命线:生命线是一条垂直的虚线, 这条虚线表示对象的存在, 在时序图中, 每个对象都有生命线
激活:代表时序图中对象执行一项操作的时期, 表示该对象被占用以完成某个任务,当对象处于激活时期, 生命线可以拓宽为矩形
消息:对象之间的交互是通过相互发消息来实现的,箭头上面标出消息名,一个对象可以请求(要求)另一个对象做某件事件
消息从源对象指向目标对象,消息一旦发送便将控制从源对象转移到目标对象,息的阅读顺序是严格自上而下的
消息交互中的实线:请求消息
消息交互中的虚线:响应返回消息
自己调用自己的方法:反身消息

参考:https://www.cnblogs.com/langtianya/p/3825764.html

统一下单接口介绍:

商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易会话标识后再按扫码、JSAPI、APP等不同场景生成交易串调起支付。

2、微信支付订单接口开发之订单增删改查
简介: 微信扫码支付之统一下单接口开发之订单增删改查

1、Dao层VideoOrder增删改查开发
@Insert("")
@Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")   //keyProperty java对象的属性;keyColumn表示数据库的字段
int insert(VideoOrder order);
 
@Select("SELECT * FROM video_order WHERE id = #{id}")
VideoOrder findById(int id);

@Select("SELECT * FROM video_order WHERE id = #{id}")
VideoOrder findByOutTradeNo(String  outTradeNo);

@Delete("DELETE FROM video_order WHERE id =#{id}")

int delete(int  id);

3、微信统一下单接口开发之CommonUtils和WXpayUtils开发
简介:封装常用工具类CommonUtils和WXpayUtils

从微信开发者文档获取部分代码 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1

1、CommonUtils包含方法 md5,uuid等
//生成 uuid, 即用来标识一笔单,也用做 nonce_str
public static String generateUUID() {
return UUID.randomUUID().toString().replaceAll("-", "")
.substring(0, 32);
}

//MD5工具类
public static String MD5(String data)  {
try {
java.security.MessageDigest md = MessageDigest.getInstance("MD5");
byte[] array = md.digest(data.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (byte item : array) {
sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
}
return sb.toString().toUpperCase();
} catch (Exception exception) {
}
return null;

}

2、WXPayUtil包含方法 xmlToMap,mapToXml,createSign,isCorrectPaySign

4、微信支付Controller下单API接口开发
简介:讲解下单接口开发,开发技巧和支付配置文件设置

1、开发controller,开发期间不加入拦截器登录校验
2、iputils工具类介绍
3、加入微信支付配置
#微信商户平台
wxpay.mer_id=1503808832
wxpay.key=xdclasss20182018xdclass2018x018d

wxpay.callback=16web.tunnel.qydev.com/pub/api/v1/wechat/order/callback1

5.签名测试结果

XML源串

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<xml>
<appid>wxt89583oxy157pv6e</appid>
<body>SpringBoot+Maven整合Websocket课程</body>
<mch_id>0747785655</mch_id>
<nonce_str>bd215711233047ba98089bd7d26e8532</nonce_str>
<notify_url>http://qcsell.natapp1.cc/api/v1/wechat/order/callback</notify_url>

<out_trade_no>56c0a8ae122b4b7da8f74628534a6108</out_trade_no>

---------------------------------------------------------------------------

商户Key:k66z0230Vf5K22Qj70Q3U8R5460930F1

6 调用微信统一下单接口,发送post请求,并获取响应转成map,获取交易会话的二维码链接code_url。

1、配置统一下单接口
2、发送请求验证
微信统一下单响应
<xml><return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wx5beac15ca207c40c]]></appid>
<mch_id><![CDATA[1503809911]]></mch_id>
<nonce_str><![CDATA[Go5gDC2CYL5HvizG]]></nonce_str>
<sign><![CDATA[BC62592B9A94F5C914FAAD93ADE7662B]]></sign>
<result_code><![CDATA[SUCCESS]]></result_code>
<prepay_id><![CDATA[wx262207318328044f75c9ebec2216783076]]></prepay_id>
<trade_type><![CDATA[NATIVE]]></trade_type>
<code_url><![CDATA[weixin://wxpay/bizpayurl?pr=hFq9fX6]]></code_url>
</xml>
3、获取code_url

遇到问题,根据错误码解决

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

7谷歌二维码工具生成扫一扫支付二维码
简介:使用谷歌二维码工具根据code_url生成扫一扫支付二维码

1、生成二维码返回页端

加入依赖
<!-- google二维码生成包 -->
<dependency>
   <groupId>com.google.zxing</groupId>
   <artifactId>javase</artifactId>
   <version>3.3.0</version>
</dependency>

<dependency>
   <groupId>com.google.zxing</groupId>
   <artifactId>core</artifactId>
   <version>2.0</version>
</dependency>

2、使用微信扫码完成支付
参考资料:https://blog.csdn.net/shenfuli/article/details/68923393
https://www.cnblogs.com/lanxiamo/p/6293580.html

二维码知识:https://coolshell.cn/articles/10590.html

简介:使用Ngrock本地接收微信回调,并开发回调接口

文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_7&index=3

1 、开发支付回调接口

//读取回调输入流   
      StringBuffer sb = new StringBuffer();    
      InputStream inputStream = request.getInputStream();    
      String line ;    
      BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));    
      while ((line = in.readLine()) != null){    
          sb.append(line);  
      }  
      in.close();  
      inputStream.close();  
      
      //解析xml成map    
      //{transaction_id=4200000141201805266700247361, nonce_str=cbb67accd8044c9ea48f3318b99d88e4, bank_type=CFT, openid=oiNKG03vVY4PHlGUEwT-ztFo8K8Y, sign=0575804DBE4E9FFF6545046FA062BC4C, fee_type=CNY, mch_id=1503809911, cash_fee=1, out_trade_no=78902e694bab485b8e7745b61e05dbfe, appid=wx5beac15ca207c40c, total_fee=1, trade_type=NATIVE, result_code=SUCCESS, time_end=20180526162759, is_subscribe=Y, return_code=SUCCESS}
      Map<String, String> callbackMap = WXPayUtil.xmlToMap(sb.toString());    
        
      //获取有序map    
      SortedMap<String, String> sortedMap = CommonUtil.getSortedMap(callbackMap) ;

回调数据:
      <xml><appid><![CDATA[wx5beac15ca207c40c]]></appid><bank_type><![CDATA[CFT]]></bank_type><cash_fee><![CDATA[10]]></cash_fee><fee_type><![CDATA[CNY]]></fee_type><is_subscribe><![CDATA[Y]]></is_subscribe><mch_id><![CDATA[1503809911]]></mch_id><nonce_str><![CDATA[de019d5f1e5d40649cd76de33f18b13e]]></nonce_str><openid><![CDATA[oiNKG03vVY4PHlGUEwT-ztFo8K8Y]]></openid><out_trade_no><![CDATA[4d8cea4a916440368583edaf82488624]]></out_trade_no><result_code><![CDATA[SUCCESS]]></result_code><return_code><![CDATA[SUCCESS]]></return_code><sign><![CDATA[FA799B7DF70C2BAC558E839E01EF341A]]></sign><time_end><![CDATA[20180626230347]]></time_end><total_fee>10</total_fee><trade_type><![CDATA[NATIVE]]></trade_type><transaction_id><![CDATA[4200000142201806264038572903]]></transaction_id></xml>

转成map:
      {transaction_id=4200000142201806264038572903, nonce_str=de019d5f1e5d40649cd76de33f18b13e, bank_type=CFT, openid=oiNKG03vVY4PHlGUEwT-ztFo8K8Y, sign=FA799B7DF70C2BAC558E839E01EF341A, fee_type=CNY, mch_id=1503809911, cash_fee=10, out_trade_no=4d8cea4a916440368583edaf82488624, appid=wx5beac15ca207c40c, total_fee=10, trade_type=NATIVE, result_code=SUCCESS, time_end=20180626230347, is_subscribe=Y, return_code=SUCCESS}
       
     
   2、注意点:
   
    回调要用post方式,微信文档没有写回调的通知方式
    可以用这个注解 @RequestMapping

问题:一定要看日志

14、微信回调处理之更新订单状态和幂等性讲解
简介:微信支付回调处理之更新订单状态和讲解什么是接口的幂等性
微信回调通知规则(通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)

幂等性: 同样的参数和值,不管调用你的接口多少次,响应结果都和调用一次是一样的
 
1、校验签名是否正确,防止伪造回调

2、查询订单是否已经更新

3、若没更新则更新订单状态

4、回应微信,SUCCESS 或者 FAIL 
       response.setContentType("text/xml");        
       response.getWriter().println("success");

15、微信支付之下单事务处理
简介:讲解下单接口增加事务和常见的事务选择
1、springboot开启事务,启动类里面增加 @EnableTransactionManagement
2、需要事务的方法上加 @Transactional(propagation = Propagation.REQUIRED)
3、aop的管理事务的好处和选择
增,删,改  开启事务

XML源串

微信支付全部详细流程相关推荐

  1. Android 微信登录详细流程

    流程讲解: 第一步:先去微信平台注册账号,填写应用信息,提交审核,大概需要三到五天的时间审核完成: 第二步:审核完成微信开放平台会生成一个appid,和sercet 这两个是唯一的id 需要妥善保管: ...

  2. WeChat:微信小程序设计流程注册完善、设计开发、审核发布之详细攻略

    WeChat:微信小程序设计流程注册&完善.设计&开发.审核&发布之详细攻略 目录 微信小程序设计流程 1.注册 2.小程序信息完善 3.开发小程序 3.1.开发文档 3.2. ...

  3. 微信小程序云开发实例 源码 部署详细流程[自带管理后台]

    项目介绍 小贝校招 项目是集校招资讯.内推.刷题.简历模板下载等功能于一体的小程序,基于微信原生+微信云开发+vant+colorui以及相关技术栈开发,自带图像云开发后台,不需要自己建网站. 源代码 ...

  4. 微信小程序开发(1)—— 微信小程序申请注册提交审核并发布详细流程

    一.微信小程序注册申请 作为开发者可以用测试版.也可以申请测试号.https://developers.weixin.qq.com/miniprogram/dev/devtools/sandbox.h ...

  5. 微信企业付款至零钱包实现详细流程Demo

    微信企业付款实现详细流程Demo 大家好,我是 梦辛工作室的灵,下面来讲一下微信企业付款实现的流程 1.准备数据 微信企业付款需要 准备 微信支付API秘钥.支付证书:下面是获取流程: 先登录微信支付 ...

  6. 微信开发,微网站开发的详细流程

    把公司开设在微信上,把自己的生意装到用户的手机里,传统生意要做到互联网上,要有互联网站,在移动互联网上,就需要有微网站.对企业而言,微网站不仅是企业的一个手机版网站,更是移动互联网时代的企业应用与商业 ...

  7. 微信小程序提交审核并发布详细流程

    微信小程序提交审核并发布详细流程 审核在1小时到N天不等 官方7天,一般3天内 提交审核?如何发布?审核过程中注意事项? 服务器: 域名只支持 https (request.uploadFile.do ...

  8. 小程序发布上线流程_微信小程序提交审核并发布详细流程

    微信小程序提交审核并发布详细流程 审核在1小时到N天不等 官方7天,一般3天内 提交审核?如何发布?审核过程中注意事项? 服务器: 域名只支持 https (request.uploadFile.do ...

  9. 微信支付0.2%费率申请「详细流程」

    公司名称:微百讯网络科技有限公司 公司资质:微信合作伙伴(微信支付服务商) 服务权限:为商家申请微信支付.(可把千分之六费率调低到千分之二) 微信支付0.2%费率申请「详细流程」 ps: 可在微信支付 ...

  10. fiash星空动画制作_三维动画制作的详细流程

    三维动画制作的详细流程: 随着互联网的发展,三维动画技术更新,三维动画制作技术在生活中运用十分广泛,我们经常在一些电视广告,影视电影中会看到一些三维特效,因为震撼的真实感很受大众喜欢.三维动画技术让视 ...

最新文章

  1. 将Byte数组转化为String
  2. php 生成动态键值 数组_你的PHP项目遇到性能问题了吗?看完这篇性能分析恍然大悟...
  3. 编写安全的ASP代码
  4. iphone4/iphone5/iphone6/iphone6Plus响应式布局适配代码
  5. Cortex - M3 中断和异常的区别
  6. js使用defineProperty的一些坑
  7. C#入门,基本的整型输入
  8. SQL Server 2019 创建数据库(利用程序)
  9. 本博客自排名1000到400的各项数据变化
  10. 征途2服务器显示不出来怎么办,征途2手游进不了游戏怎么办 游戏无法进入解决方法[多图]...
  11. 找不到文件“c:/Users/Administrator/Desktop/vue_dom2/node_modules/postcss-discard-overridden/types/index.d.
  12. Alpha测试 / Beta测试 / 黑盒测试 /白盒测试概述
  13. 买房的疯了-开发商笑不起来了(本文仅供新浪)
  14. 执节歌者 · 箫谱1
  15. 飞书和钉钉之间,差了几个企业微信?
  16. 高质量前端快照方案:来自页面的「自拍」
  17. Python基础学习笔记:匿名函数
  18. 我作为大学生刚出校园实习的感受
  19. C++利用opencv调用pytorch训练好的分类模型
  20. 基于PLC系统的点焊机器人数据通讯采集方案

热门文章

  1. 2022年网络安全行业发展趋势
  2. Python TCP接收/发送信息
  3. 天眼查企业工商信息查询接口
  4. matlab直方图均衡化函数
  5. 二维最大类间方差阈值分割的快速迭代算法
  6. ArcGIS georeference地理配准提高精度
  7. 20190408-相速度和群速度、傅里叶变换与波动方程的色散关系、介电常数与电导、介电函数与折射率、散度定理、电子迁移率、电磁波波动方程、自由电子气的介电函数
  8. 你了解PowerBI中的去年同期吗
  9. h5页面 请在微信客户端打开链接_使用Fiddler抓包解决“请在微信客户端打开链接”的问题...
  10. Matlab/Simulink-Boost电路双闭环仿真搭建