热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信商户扫码支付java开发[从零开发]

这个教程可以用作了解扫码支付的整体运行过程,已经实现了前端扫码,记录订单,回调等一套完整的微信扫码支付。相关链接:微信支

这个教程可以用作了解扫码支付的整体运行过程,已经实现了前端扫码,记录订单,回调等一套完整的微信扫码支付。

相关链接:

微信支付开发:https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F

微信扫码支付开发文档: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1

微信支付java Sdk:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1

微信支付相比支付宝而言。是比较多坑的。文档也没有很详细,但是 其实所有东西微信都已经给了,就是组件都给了,但是没有说明使用方式。网上的教程有新也有旧,其实核心代码已经不需要自己实现了。

前期准备:

1.先申请商户号,以下是必要参数

2.下载SDK https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1

虽然官网有写包含demo 其实只有sdk,是不能直接运行的,代码不算太难,稍微看一下,也大概知道sdk写的是什么了

如果要测试回调,请自行准备一个可以连接外网的服务器,或者使用花生壳(这个还没测试过)

 

主要流程

用户->点击商品->后端生成二维码地址返回给前端->用户支付->微信通知用户支付成功(调用我们写的回调地址)->通知后端支付成功

比较坑的地方

1.sdk中需要自己实现 WXPayConfig 类,而WXPayConfig 类有一个getWXPayDomain方法需要这样实现

2.回调不成功的情况

这是因为回调的时候编码是MD5,但是sdk里面默认是HMACSHA256,所以会出现一直验证不对的情况

改成这样即可

回调相关文档:

https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_7&index=8

回调接口开发要注意两点

1、商户系统对于支付结果通知的内容一定要做签名验证,并校验返回的订单金额是否与商户侧的订单金额一致,防止数据泄漏导致出现“假通知”,造成资金损失。

2、当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。

这两点一定要做到,不然会出现数据问题,相关实现demo代码可作参考

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

其实微信支付不算太难,文档比较散乱,第一次可能会比较混乱,但是逻辑理清楚就比较简单了。自己需要的实现的只是业务相关逻辑,和相关订单数据保存

以下是我的demo文档可以作为参考。

码云地址:https://gitee.com/minstrel01/wxpay_demo.git

如果只是想单纯的看微信支付的代码,不管相关业务逻辑

只需要看WXPayServiceImpl 这个类,只要有这个类就可以实现支付,查询和回调

从码云下载好代码后,只需要执行sql文件和写入wxpay-dev.properties相关参数就可以运行了。

因为微信支付没有扫码回调相关功能。所以前端是用了定时调用查询订单是否成功支付(感觉有点蠢),但是看其他网站(例如花生壳微信支付页也是用前端定时器) 如果有更好的方法请告诉我。


推荐阅读
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 本文介绍了一个基于 Java SpringMVC 和 SSM 框架的综合系统,涵盖了操作日志记录、文件管理、头像编辑、权限控制、以及多种技术集成如 Shiro、Redis 等,旨在提供一个高效且功能丰富的开发平台。 ... [详细]
  • 程序员如何优雅应对35岁职业转型?这里有深度解析
    本文探讨了程序员在职业生涯中如何通过不断学习和技能提升,优雅地应对35岁左右的职业转型挑战。我们将深入分析当前热门技术趋势,并提供实用的学习路径。 ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • yikesnews第11期:微软Office两个0day和一个提权0day
    点击阅读原文可点击链接根据法国大选被黑客干扰,发送了带漏洞的文档Trumps_Attack_on_Syria_English.docx而此漏洞与ESET&FireEy ... [详细]
  • 本文回顾了2017年的转型和2018年的收获,分享了几家知名互联网公司提供的工作机会及面试体验。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • 本文深入探讨了 Exchange Server 2010 中客户端访问的代理和重定向机制,特别是在跨站点环境中如何配置这些功能以确保用户能够顺利访问邮箱服务。通过详细解析不同场景下的应用,帮助管理员更好地理解和实施相关设置。 ... [详细]
  • Python3 中使用 lxml 模块解析 XPath 数据详解
    XPath 是一种用于在 XML 文档中查找信息的路径语言,同样适用于 HTML 文件的搜索。本文将详细介绍如何利用 Python 的 lxml 模块通过 XPath 技术高效地解析和抓取网页数据。 ... [详细]
  • 深入解析ESFramework中的AgileTcp组件
    本文详细介绍了ESFramework框架中AgileTcp组件的设计与实现。AgileTcp是ESFramework提供的ITcp接口的高效实现,旨在优化TCP通信的性能和结构清晰度。 ... [详细]
author-avatar
孤独秀风_328
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有