支付的代码只需十行,项目的代码请查看https://github.com/TLR2019/xc-edu02

1 微信支付

1.1 下单生成二维码

二维码可以利用下图的请求参数生成(下图没有截全,详系参数可以查看https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1)。

利用参数生成二维码的算法已经有人做好了。可以借助best-pay-sdk(https://github.com/Pay-Group/best-pay-sdk)将参数转化成生成二维码图片所需的输入。

生成二维码的过程:

(1)给出商品信息:订单号,金额。

(2)选择支付类型:微信OR支付宝

@Overridepublic PayResponse create(String orderId, BigDecimal amount, BestPayTypeEnum bestPayTypeEnum) {if(bestPayTypeEnum != BestPayTypeEnum.WXPAY_NATIVE && bestPayTypeEnum != BestPayTypeEnum.ALIPAY_PC){throw new RuntimeException("暂不支持的支付类型");}//写入数据库PayRequest request = new PayRequest();request.setOrderName("7841763-最好的支付sdk");request.setOrderId(orderId);request.setOrderAmount(amount.doubleValue());request.setPayTypeEnum(bestPayTypeEnum);PayResponse response = bestPayService.pay(request);return response;}

(3)配置微信支付的APPID,MchID和MchKey。不同类型需要的配置不同,详情可查看https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

 @Beanpublic BestPayService bestPayService() {//微信支付配置WxPayConfig wxPayConfig = new WxPayConfig();wxPayConfig.setAppId("wxd898fcb01713c658");wxPayConfig.setMchId("1483469312");wxPayConfig.setMchKey("098F6BCD4621D373CADE4E832627B4F6");bestPayService.setAliPayConfig(aliPayConfig);return bestPayService;}

(4)利用静态化网页(只需要读取二维码链接),显示二维码

<body>
<div id="myQrcode"></div><script src="https://cdn.bootcss.com/jquery/1.5.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/jquery.qrcode/1.0/jquery.qrcode.min.js"></script>
<script>jQuery('#myQrcode').qrcode({text: "${codeUrl}"});
</script>
</body>

1.2 扫码支付调用异步通知函数

(1)扫码支付

(2)异步通知函数

签名校验、金额校验并告知微信不要重复通知。

 /*** 异步通知处理** @param notifyData*/@Overridepublic String asyncNotify(String notifyData) {//1. 签名检验PayResponse payResponse = bestPayService.asyncNotify(notifyData);//2. 金额校验(从数据库查订单)//3. 修改订单支付状态if (payResponse.getPayPlatformEnum() == BestPayPlatformEnum.WX) {//4. 告诉微信不要再通知了return "<xml>\n" +"  <return_code><![CDATA[SUCCESS]]></return_code>\n" +"  <return_msg><![CDATA[OK]]></return_msg>\n" +"</xml>";}else if (payResponse.getPayPlatformEnum() == BestPayPlatformEnum.ALIPAY) {return "success";}throw new RuntimeException("异步通知中错误的支付平台");}

不要重复通知:

2 支付宝支付

2.1 下单生成二维码

生成二维码过程:

(1)给出商品信息:订单号,金额。

(2)选择支付类型:微信OR支付宝

/*** 创建/发起支付** @param orderId* @param amount*/@Overridepublic PayResponse create(String orderId, BigDecimal amount, BestPayTypeEnum bestPayTypeEnum) {if(bestPayTypeEnum != BestPayTypeEnum.WXPAY_NATIVE && bestPayTypeEnum != BestPayTypeEnum.ALIPAY_PC){throw new RuntimeException("暂不支持的支付类型");}//写入数据库PayRequest request = new PayRequest();request.setOrderName("7841763-最好的支付sdk");request.setOrderId(orderId);request.setOrderAmount(amount.doubleValue());request.setPayTypeEnum(bestPayTypeEnum);PayResponse response = bestPayService.pay(request);return response;}

(3)配置支付宝

公众账号ID AppId,私钥,公钥,通知URL 以及支付成功后跳转的页面。

@Beanpublic BestPayService bestPayService() {//微信支付配置WxPayConfig wxPayConfig = new WxPayConfig();wxPayConfig.setAppId("wxd898fcb01713c658");wxPayConfig.setMchId("1483469312");wxPayConfig.setMchKey("098F6BCD4621D373CADE4E832627B4F6");//192.168.50.101 同一局域网可访问//125.121.56.227 云服务器可行,家庭宽带不行(路由器、光猫)wxPayConfig.setNotifyUrl("http://namei.natapp1.cc/pay/notify");AliPayConfig aliPayConfig = new AliPayConfig();aliPayConfig.setAppId("2018062960540016");aliPayConfig.setPrivateKey("MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCC/tk1oqymli5HpP9MxOkNofKkON1a6EqKg/S0++mZoKLInLasLkNuz0F8nSg/nBZGMv8XcIOXeOsK1ZT9tibxlgzun22lnBpHLueCAZlqITx33XO8SwiVULar2NIVFJwuUdvHPf/2Wj361cTd+zw+uJTPy3vIBljeOHDajzqBg9m5JrCIOgUze+4MZBT5/74gwwwpMDhRHRfR+4FTFmxqqzbTBGaFv4gCLSRB/3VpuruAP5AKCTR2ATHXgFO9veCemNwx5sI3F9Tw43+16xzAZh2T/6Xb3d31H9k31h9Iai7t2s00qY6eKsFpdi4ySK5qB2G9lbFvbpBv+3gz/5UFAgMBAAECggEANWn7Yc5yPf8w4c/atg/4w7FMgkAZqm7brj1+M6ogp58DoW+dYPoATxe9qTVf6wgXYQp8T692SPZqSOGsPgPfP1Ui8s4ZZJURdgMfLTi/uLHSuUGYZqfl2RSvV8UybJwZzx1b05NpYqeLbFNsUeOWvjB/pXdggsBrzjkPc19ByPtERzjiEFzvxGdYPDdvgNUmvbQj647X8umdyDAcNAbd8rkSQW87zBT12OQ/i/QR74BBg4VBJqTg9APk9mdVNufvxMwi9+lyGsGRFdnjmPCLHJvnT3Nh9KSHWuLrOeUjkGVEozd40iz/8LVwr+BZNeL6EjtZ3ztfphnIl92lMFNhQQKBgQDlm0t5N0REM0al/L0BygkwLsHHvAmjYhzjDJeooLgH0NyYYP/ruqqF6oPxDDaw17pciEypyOdoQ1JFaw9Uq41PfZlqL74PehSD3KWe7pPzlWIukaDq1aPit/pox92+ZO0lqwHQa80Tf1PO55xAVJQPltrhScnAmZiVIG1TD9z+sQKBgQCSDbGW2lVx5b9s1R0l8SRvoHQc83iIIyqx/+UJEEwxEMwSJ4ygAfUPcrJOYs2gOB9Ny08xqtNEQKlghwgwFqIec705AiU67Bw3TjWHnxgzvhzLPCrty/yJbWMmpXDjMm/VvwASkBL6pijjh/GUrRsJvh0McgWkDIg8OgIRu5rYlQKBgQChJ+nGb7sTn2XT9Vv4GIVwczEB7wJY0fFyj5EXA4+HtNpQfazDGOa9TchD9Q2h/BjK/8PHW8LIVJA3NxiwliR+CasXc+ET3dzuXH1G2y+vRUd/ZimrCj6YUAeLadVC4HXu/WMtlayAJdt+GuR55qNxebGxdOgNrgEBkpwJM9YqUQKBgCvFcNit/HeTDEiYohCx8WKG6uWWTiQ2reAEueZ6fOsjhpVWRv3ZOFF15Vw6njeLOk59RPG0qXZGDr0AGwMWdWW8+BOyweejxV0J0l8f3gf7zPNXx+HWhYvGPbXiVS+x+PRNNr9ZcGawD4cJQex16KmF0XzeWzRsERRDqkUYPXL1AoGBAJVzao5Irdt0wj/R8NG3uVeEMbESNLKNLZ7M9hPaZn2xacoPHXXLKg2m546RYNOngYLB5l9dbpake5BoXtuGylmtD1tZvGSxLmznfrxQpZr0vuR2iCIgsVGdPhJlIRbKyeocofsRdaXgD413O4MCi/WmJ4E1ydyOqv+2cCQQAJBB");aliPayConfig.setAliPayPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtojdtkETo4OEsQLeyyPwtWK9ZqYJANq6jjXC74vk9n/r88yW577y7VdxcK9X/F/wvR7D8of7lndYdhg6xZro0eO2skPZTU+A549J7tfzahVbIBAS+x1WPFJwPtVrfBBvkwHL8PT+YnMcxKyBxOa6wo8fzJs1NgU1+qnDCpwUFyv59GUfdzBvTPL1fY3ZzvRHFHbapevVltbO/jNV0thb8dafmcJXl8lnjQy3XlH3eTH28tlVfqickacfRl/WSD8WN3dGgF7dTDKYfSR7YB7jsHe6VzoHM3UnD9/yQbi/Z3ZrL7yOxEjq4tfrKlZIW7ZCoUpOU4QdPIRhLeC6nWyGrQIDAQAB");aliPayConfig.setNotifyUrl("http://namei.natapp1.cc/pay/notify");aliPayConfig.setReturnUrl("http://127.0.0.1");BestPayServiceImpl bestPayService = new BestPayServiceImpl();bestPayService.setWxPayConfig(wxPayConfig);bestPayService.setAliPayConfig(aliPayConfig);return bestPayService;}

(4)生成二维码

2.2 扫码支付调用异步通知函数

(1)扫码支付

和微信一样,这里就不扫了。

(2)异步通知函数

签名校验、金额校验并告知微信不要重复通知。

 /*** 异步通知处理** @param notifyData*/@Overridepublic String asyncNotify(String notifyData) {//1. 签名检验PayResponse payResponse = bestPayService.asyncNotify(notifyData);//2. 金额校验(从数据库查订单)//3. 修改订单支付状态if (payResponse.getPayPlatformEnum() == BestPayPlatformEnum.WX) {//4. 告诉微信不要再通知了return "<xml>\n" +"  <return_code><![CDATA[SUCCESS]]></return_code>\n" +"  <return_msg><![CDATA[OK]]></return_msg>\n" +"</xml>";}else if (payResponse.getPayPlatformEnum() == BestPayPlatformEnum.ALIPAY) {return "success";}throw new RuntimeException("异步通知中错误的支付平台");}

11支付功能≠支付系统:微信支付宝通用支付系统开发实战相关推荐

  1. 「开源系统」IJPay 让支付触手可及封装了微信支付宝等支付

    介绍语 本号主要是Java常用关键技术点,通用工具类的分享:以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+d ...

  2. 新版开运网运势测算网站源码 支持微信/支付宝H5支付 支持分销代理 可封装APP

    源码介绍 我在外面花钱购买的某站VIP资源,就是那种搬砖站,买来没时间调试发给大家看看吧,喜欢的就下去玩玩! 支持微信/支付宝H5和电脑端扫码支付.手机端可以调起微信/支付宝应用支付 支持后台设置价格 ...

  3. 微信|支付宝|银联支付(电脑和手机端区别)

    介绍 项目目前存在三种支付方式:支付宝,微信以及银联支付. 电脑端 支付宝和微信采用扫码支付 银联是web端跳转支付 手机端 微信H5支付只可以在微信中使用 支付宝H5支付,除了微信都可以 银联H5支 ...

  4. 微信支付:支付流程分析、微信扫码支付(HttpClient)、微信支付二维码生成、检测支付状态、订单状态操作准备工作、支付信息回调、MQ处理支付回调状态、定时处理订单状态

    微信支付 微信支付开发的整体思路 生成支付二维码 查询支付状态(微信的服务器) 实现订单状态的修改.删除订单 支付状态回查->微信服务器将支付状态返回给支付微服务 MQ处理支付回调状态 Rabb ...

  5. java微信无感支付怎么开通_微信无感支付怎么设置?方法介绍

    随着微信支付在我们日常生活中的不断普及,微信更是不负众望,相继推出了很多新功能,这段时间,微信无感支付让很多用户交口称赞,无数的车主朋友都微信无感支付体验到了快速支付通行费的方便.那么,你知道微信无感 ...

  6. 微信支付密码设置html,微信怎么修改支付密码【操作办法】

    喜欢使用电脑的小伙伴们一般都会遇到win7系统微信怎么修改支付密码的问题,突然遇到win7系统微信怎么修改支付密码的问题就不知道该怎么办了,其实win7系统微信怎么修改支付密码的解决方法非常简单,按照 ...

  7. java微信无感支付怎么开通_微信无感支付在哪?怎么使用微信无感支付

    不久前微信启动了高速无感支付,也就是说无需手机,即可付款,不知道大家有没有使用过?其实这一功能已经在山东等多个城市成功试点,现在已经在全国大多数城市覆盖. 那么微信高速无感支付要如何使用呢? 开通微信 ...

  8. php微信公众号支付接口案例,Thinkphp微信公众号支付接口

    本文实例为大家分享了Thinkphp微信公众号支付接口,供大家参考,具体内容如下 第一步 先把文件夹的那两个图片 配置成一样的路径 除了域名要改 其他保持一致. 第二步 把 Weixinpay 这个文 ...

  9. 微信支付【H5非微信内浏览器支付】

    最近需要在电商平台集成微信支付,PC端扫码支付,移动端是H5支付,扫码支付,这个比较简单,主要是H5支付,要求非微信内浏览器支付.看了官方文档发现,没有这种模式,只有扫码支付.刷卡支付.APP支付.公 ...

最新文章

  1. 用vs2010打开使用vs2013升级后的WP工程
  2. 山社电机: SAMSR -外部接口测试
  3. (转载)keras使用入门及3D卷积神经网络资源
  4. python pil无法安装_解决virtualenv下安装Python PIL的support not available问题
  5. 如何做好网络推广浅析新手对网站SEO内链该如何优化?
  6. 01爬虫基本原理及Requests库下载
  7. python字符串解释_Python学习:字符串的简单解释,深入浅出
  8. 在方法参数上使用final关键字
  9. egg 编码规范_Egg 框架简述 (仅学习)
  10. LeetCode刷题——无重复字符的最长子串
  11. Spring Cloud 入门 之 Config 篇(六)
  12. python批量创建实例_Django批量创建Model实例
  13. 计算机专业英语第六版考试试卷,计算机专业英语试题及答案(A卷)
  14. 权重确定方法五:CRITIC权重法
  15. Python:存取npy格式数据
  16. 中国数据中心最新规划图,中国数据中心建设情况
  17. [Android问答] 如何获得手机屏幕分辨率?
  18. 国产操作系统VS Windows系统的深度使用比较,哪种操作系统更好用?来自一位深度使用者的全面剖析
  19. 普通打印机支持的airprint功能
  20. 芒果不能用百度了,怎么办?

热门文章

  1. 周期为“2L“的函数展开为傅里叶级数
  2. CentOS7-查看IP
  3. gateway+vue实现防接口重放、防篡改
  4. 数据结构2(线性表)
  5. 利用C51单片机模拟SPI进行双机通信
  6. Win10早期版本下月终止服务、百万医疗设备存在漏洞风险|11月10日全球网络安全热点
  7. 如何搭建nginx服务器?
  8. oracle 恢复删除的数据 oracle恢复删除的数据
  9. ubuntu修改时区
  10. arm解锁 j-flash_J-Link固件烧录以及使用J-Flash向arm硬件板下载固件程序(示例代码)...