微信支付接口开发详流程

article/2025/8/19 9:11:40

微信支付

文章目录

      • 1.支付接口分析
      • 2. 开发创建订单接口
      • 3. 开发根据订单id查询订单详情接口
      • 4. 开发生成二维码接口
      • 5. 开发查询订单支付状态接口

1.支付接口分析

在这里插入图片描述
引入依赖

<dependencies><dependency><groupId>com.github.wxpay</groupId><artifactId>wxpay-sdk</artifactId><version>0.0.3</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency>
</dependencies>

创建订单相关表
在这里插入图片描述

2. 开发创建订单接口

1.编写订单controller

@RestController
@RequestMapping("/orderservice/order")
@CrossOrigin
public class TOrderController {@Autowiredprivate TOrderService orderService;//根据课程id和用户id创建订单,返回订单id@PostMapping("createOrder/{courseId}")public R save(@PathVariable String courseId, HttpServletRequest request) {String orderId = orderService.saveOrder(courseId, JwtUtils.getMemberIdByJwtToken(request));return R.ok().data("orderId", orderId);}
}

2.编写订单OrderServiceImpl

	//创建订单实现类@Overridepublic String saveOrder(String courseId, String memberId) {//远程调用课程服务,根据课程id获取课程信息CourseInfoForm courseDto = eduClient.getCourseInfoDto(courseId);//远程调用用户服务,根据用户id获取用户信息UcenterMember ucenterMember = ucenterClient.getInfo(memberId);//创建订单Order order = new Order();order.setOrderNo(OrderNoUtil.getOrderNo());order.setCourseId(courseId);order.setCourseTitle(courseDto.getTitle());order.setCourseCover(courseDto.getCover());order.setTeacherName("test");order.setTotalFee(courseDto.getPrice());order.setMemberId(memberId);order.setMobile(ucenterMember.getMobile());order.setNickname(ucenterMember.getNickname());order.setStatus(0);order.setPayType(1);baseMapper.insert(order);return order.getOrderNo();}

3. 开发根据订单id查询订单详情接口

controller

 @GetMapping("getOrder/{orderId}")public R get(@PathVariable String orderId) {QueryWrapper<Order> wrapper = new QueryWrapper<>();wrapper.eq("order_no", orderId);Order order = orderService.getOne(wrapper);return R.ok().data("item", order);}

4. 开发生成二维码接口

controller

 /*** 生成二维码** @return*/@GetMapping("/createNative/{orderNo}")public R createNative(@PathVariable String orderNo) {Map map = payService.createNative(orderNo);return R.ok().data(map);}

service实现

@Overridepublic Map createNative(String orderNo) {try {//根据订单id获取订单信息QueryWrapper<Order> wrapper = new QueryWrapper<>();wrapper.eq("order_no",orderNo);Order order = orderService.getOne(wrapper);Map m = new HashMap();//1、设置支付参数m.put("appid", "填写关联的公众号appid");m.put("mch_id", "商户号");m.put("nonce_str", WXPayUtil.generateNonceStr());m.put("body", order.getCourseTitle());m.put("out_trade_no", orderNo);m.put("total_fee", order.getTotalFee().multiply(new BigDecimal("100")).longValue()+"");m.put("spbill_create_ip", "127.0.0.1");m.put("notify_url", "回调地址");m.put("trade_type", "NATIVE");//2、HTTPClient来根据URL访问第三方接口并且传递参数HttpClient client = new HttpClient("https://api.mch.weixin.qq.com/pay/unifiedorder");//client设置参数client.setXmlParam(WXPayUtil.generateSignedXml(m, "商户key"));client.setHttps(true);client.post();//3、返回第三方的数据String xml = client.getContent();Map<String, String> resultMap = WXPayUtil.xmlToMap(xml);//4、封装返回结果集Map map = new HashMap<>();map.put("out_trade_no", orderNo);map.put("course_id", order.getCourseId());map.put("total_fee", order.getTotalFee());map.put("result_code", resultMap.get("result_code"));map.put("code_url", resultMap.get("code_url"));//微信支付二维码2小时过期,可采取2小时未支付取消订单//redisTemplate.opsForValue().set(orderNo, map, 120, TimeUnit.MINUTES);return map;} catch (Exception e) {e.printStackTrace();return new HashMap<>();}}

5. 开发查询订单支付状态接口

@GetMapping("/queryPayStatus/{orderNo}")public R queryPayStatus(@PathVariable String orderNo) {//调用查询接口Map<String, String> map = payService.queryPayStatus(orderNo);if (map == null) {//出错return R.error().message("支付出错");}if (map.get("trade_state").equals("SUCCESS")) {//如果成功//更改订单状态//payService.updateOrderStatus(map);return R.ok().message("支付成功");}return R.ok().code(25000).message("支付中");}

service实现

@Overridepublic Map queryPayStatus(String orderNo) {try {//1、封装参数Map m = new HashMap<>();m.put("appid", "填写关联的公众号appid");m.put("mch_id", "商户号");m.put("out_trade_no", orderNo);m.put("nonce_str", WXPayUtil.generateNonceStr());//2、设置请求HttpClient client = new HttpClient("https://api.mch.weixin.qq.com/pay/orderquery");client.setXmlParam(WXPayUtil.generateSignedXml(m, "商户key"));client.setHttps(true);client.post();//3、返回第三方的数据String xml = client.getContent();Map<String, String> resultMap = WXPayUtil.xmlToMap(xml);//6、转成Map//7、返回return resultMap;} catch (Exception e) {e.printStackTrace();}return null;}

http://chatgpt.dhexx.cn/article/ked0SUs1.shtml

相关文章

微信支付API v3接口使用应用篇

目录 前言版本应用基础配置1.申请商户API证书2.设置接口密钥3.下载平台证书 接口实测微信支付API官方客户端1.客户端2.支付调起参数签名3.回调通知 参考资料 前言 最近新项目中有涉及到微信支付相关接口业务的交互&#xff0c;毕竟原先开发接触过支付这块&#xff0c;轻车熟路…

Java对接微信、支付宝、银联第三方支付

一、微信支付 1、业务平台介绍&#xff1a; &#xff08;1&#xff09;微信公众平台 微信公众平台是微信公众账号申请入口和管理后台。商户可以在公众平台提交基本资料、业务资料、财务资料申请开通微信支付功能。 &#xff08;2&#xff09; 微信开放平台 微信开放平台是商…

php微信支付宝第三方接口开发平台,帝国CMS第三方个人支付接口微信支付宝免签约即时到账api_帝国网站管理系统插件...

帝国CMS网站管理系统是一个高效的网站解决方案,本文将给出开发好的帝国CMS第三方个人免签约支付接口插件(支持支付宝/微信扫码即时到账支付),可用于帝国系统收款使用,供有需求的用户参考或快速接入。本代码无加密完全开源,欢迎参考/使用。 概述 环境 本接口插件基于帝国CMS…

第三方支付接口之微信扫码支付

此篇文章是为了记录学习如何编写第三方支付接口&#xff0c;熟悉这个流程。使用的是威富通第三方支付平台https://open.swiftpass.cn/ 对接的是微信扫码和公总号支付 基本成员&#xff1a;用户&#xff0c;商户&#xff0c;第三方支付方 扫码支付业务流程&#xff1a; 接口…

第三方支付接口有哪些?怎么申请?

第三方支付接口有哪些&#xff1f; 目前中国国内的第三方支付产品主要有支付宝&#xff08;阿里巴巴旗下&#xff09;、微信&#xff08;腾讯公司&#xff09;、QQ钱包&#xff08;财付通公司&#xff09;、云闪付&#xff08;中国银联旗下&#xff09;等。其中最用户数量最大…

调用微信和支付宝第三方接口方法总结

最近项目上用到了调用微信和支付宝的第三方支付接口&#xff0c;因为以前没用过&#xff0c;所以这次用到了之后总结一下分享给大家&#xff0c;这里介绍两种支付方式&#xff0c;即app支付和扫码支付方式。 一、app支付&#xff08;这里只介绍java端调用支付&#xff0c;安卓…

第三方支付:微信公众号接入支付宝支付开发

第三方支付&#xff1a;微信公众号接入支付宝支付开发 引言 这篇文章使用一些简单的代码例子来解释微信接入支付宝支付功能的操作步骤&#xff0c;即使新手也可以轻松参透的。 第三方支付是指具备一定实力和信誉保障的独立机构&#xff0c;采用与各大银行签约的方式&#xff…

第三方支付接入(微信,支付宝)

写在最前面 以下内容关于微信相关的&#xff0c;除了binarywang&#xff0c;个人认为都不要再用了。相比较王大哥的封装&#xff0c;我自己写的真是连弟弟都不如。 支付宝相关的&#xff0c;好久不用了&#xff0c;不知道还能不能工作。建议找创建时间比较新的文章来看。 关…

微信第三方支付接口java调用详细文档

1.显示支付二维码 支付流程 首先用户选好商品后 跳到结算页面 在点击支付提交时应先将表单的数据保存到数据库(一般都会有订单表一二级) 经过后台保存数据后再转发到前台(二维码是后台调用微信生成的) 看到扫码页面 当用户扫码成功后 更改订单状态为已支付(一般情况 根据业务…

微信支付接口配置教程(下)

微信第三方平台微信支付接口配置教程&#xff08;下&#xff09; 上传微信支付证书 登录后台系统&#xff0c;在后台微信商城里&#xff0c;点击微信支付证书。这一步我们需要上传对应的微信支付证书&#xff0c;这个证书就是文章《微信第三方平台微信支付接口配置教程&#…

聊一聊对“事务”的理解

什么是事务 事务即英文Transaction&#xff0c;在软件开发过程中&#xff0c;难免需要考虑处理事务。从微观层面看亦或者从成员最早了解到这个词汇看&#xff0c;事务通常指多条写入数据库的语句需要并发成功执行&#xff0c;从宏观层面看得话则是客户端发出的并发请求需要一致…

聊一聊wifi6

引言 8.11&#xff0c;小米十周年&#xff0c;雷军即将召开发布会&#xff0c;相信又是are you ok 放大招的时候了。作为小米各种产品的使用者&#xff08;包括但不限于手机&#xff0c;路由器&#xff0c;音响&#xff0c;手环&#xff0c;中性笔… &#xff09;&#xff0c;…

聊一聊我对测试开发的看法

前言 在一线大厂&#xff0c;没有测试这个岗位&#xff0c;只有测开这个岗位 即使是做业务测试&#xff0c;那么你的title也是测开 所以想聊一聊测开的看法 但不代表这是正确的看法&#xff0c;仅供参考 还没来阿里之前&#xff0c;我对测开的看法 一直以为专职做自动化测…

聊一聊,我对DDD的关键理解

作者&#xff1a;闵大为 阿里业务平台解决方案团队 当我们在学习DDD的过程中&#xff0c;感觉学而不得的时候&#xff0c;可能会问&#xff1a;我们还要学么&#xff1f;这的确引人深思。本文基于工作经验&#xff0c;尝试谈谈对DDD的一些理解。 一、序 《阿甘正传》中&#xf…

聊一聊Kotlin的泛型

Kotlin的泛型 简介 与java一样&#xff0c;kotlin也支持泛型&#xff0c;用法和java泛型差别不大&#xff0c;kotlin特色是型变支持。 基本用法&#xff1a; 定义类&#xff1a; 跟java相同&#xff0c;定义在类后面的尖括号&#xff1a; open class Basket<T>{}定…

聊一聊学习方法

聊一聊学习方法 为什么学习没效果&#xff1f;你只是看起来很努力自知与不自知&#xff0c;真的不是一字之差什么时候真的能出效果&#xff1f;学习方法一&#xff08;拍照式记忆&#xff09;学习方法二&#xff08;殊途同归&#xff09;学习方法三&#xff08;精细化管理&…

聊一聊ThreadLocal内存泄漏的问题

回答任何一个问题的时候应该要遵循&#xff1a;明确题意-->深入浅出-->举例说明-->总结&#xff0c;这四个步骤很重要&#xff0c;可以让你沉着冷静&#xff0c;思路清晰&#xff0c;避免尴尬。 01 — 明确题意 明确题意的意思就是先明确一下面试官的题目&#xff0…

聊一聊Https

前言 https协议是一种在http的基础上进行加密的协议&#xff0c;在http协议传输过程中&#xff0c;传输的数据都是已明文的方式进行传输&#xff0c;那我们的信息就有可能被他人进行捕获篡改&#xff08;比如你给女神表白却被程序员情敌发现并修改了你的消息&#xff0c;然后你…

SLAM基础——聊一聊信息矩阵

文章目录 前言1 :book: 信息矩阵1-1 :bookmark: 信息矩阵是什么&#xff1f;有什么作用&#xff1f;1-2 :bookmark: 信息矩阵与Hessian矩阵的关系1-2-1 Hessian矩阵和H矩阵的关系1-2-2 Hessian或H矩阵和信息矩阵的关系 2 :book: 信息矩阵与最小二乘的关联2-1 :bookmark: 先谈一…

聊一聊SpringCloud的五大组件

聊一聊SpringCloud的五大组件 1.初始SpringCloud 微服务是一种架构方式&#xff0c;最终肯定需要技术架构去实施。 微服务的实现方式很多&#xff0c;但是最火的莫过于Spring Cloud了。为什么&#xff1f; 后台硬&#xff1a;作为Spring家族的一员&#xff0c;有整个Spring全…