最近做了一个电商项目,写了微信公众号支付和封装的app支付。用法是大同小异。
在次之前,你需要先了解一下,微信支付的 开发文档。
具体的返回信息,参考开发文档,这里主要是把核心代码和流程写了一下。微信JSAPI支付
转载需注明:https://blog.csdn.net/juan1997/article/details/90647747
百度网盘下载链接
链接:https://pan.baidu.com/s/1Jvm_Tul-Wjd8dI186CPQ_w
提取码:4tpi
一、往pom.xml文件引入包

<!-- 支付sdk --><dependency><groupId>com.egzosn</groupId><artifactId>pay-java-common</artifactId><version>2.12.4</version></dependency><!-- 微信支付 --><dependency><groupId>com.egzosn</groupId><artifactId>pay-java-wx</artifactId><version>2.12.4</version></dependency>

二、在application.yml文件配置微信公众的基础信息。 填写自己的公众号的信息

#  微信公众号支付配置weixinpay:mchId:  # 商户IdstorePassword:  # 秘钥支付密码appid: secretKey:  # 秘钥notifyUrl:  #微信支付回调keystore:    # 证书所在位置# app微信支付appweixinpay:mchId: appid: secretKey: notifyUrl: keystore: storePassword:

三、创建它所对应的配置信息

/*** 微信公众号的配置信息* @author juan**/@Data@Component@ConfigurationProperties(prefix = "weixinpay")public class WeixinAccPayConfig {private String mchId;private String appid;private String secretKey;private String notifyUrl;private String keystore;private String storePassword;}      /*** app微信支付的配置信息* @author juan**/@Data@Component@ConfigurationProperties(prefix = "appweixinpay")public class AppWeixinAccPayConfig {private String mchId;private String appid;private String secretKey;private String notifyUrl;private String keystore;private String storePassword;}

四、逻辑代码的实现

/*** 微信公众号的controller类。app的微信支付和公众号的微信支付大同小异。简单地来说就是把WeixinAccPayConfig换成AppWeixinAccPayConfig就可以了。* @author juan**/@RestController@RequestMapping("/accPay")public class WeiXinAccPayController{@AutowiredWeixinAccPayConfig weixinpayConfig;//微信公众号。private PayService service = null;@PostConstructpublic void init() {WxPayConfigStorage wxPayConfigStorage = new WxPayConfigStorage();wxPayConfigStorage.setMchId(weixinpayConfig.getMchId()); // 合作者id(商户号wxPayConfigStorage.setAppid(weixinpayConfig.getAppid()); // 应用idwxPayConfigStorage.setSecretKey(weixinpayConfig.getSecretKey()); // 密钥wxPayConfigStorage.setNotifyUrl(weixinpayConfig.getNotifyUrl()); // 异步回调地址 http://域名:端口号/项目名/回调接口名称wxPayConfigStorage.setSignType(SignUtils.MD5.name());wxPayConfigStorage.setInputCharset("utf-8");// 支付api证书设置,退款必须 方式一HttpConfigStorage httpConfigStorage = new HttpConfigStorage();httpConfigStorage.setKeystore(weixinpayConfig.getKeystore());// 支付密钥存放位置 文件是以.p12为后缀名字httpConfigStorage.setStorePassword(weixinpayConfig.getStorePassword());// 是否为证书地址httpConfigStorage.setPath(true);service = new WxPayService(wxPayConfigStorage, httpConfigStorage);// 请求连接池配置// 最大连接数httpConfigStorage.setMaxTotal(20);// 默认的每个路由的最大连接数httpConfigStorage.setDefaultMaxPerRoute(10);service.setRequestTemplateConfigStorage(httpConfigStorage);}@ApiOperation("返回订单信息")@RequestMapping(value = "weixinpay", method = RequestMethod.POST)public Map<String, Object> weixinpay(HttpServletRequest request,在这里可以加前台需要向后台传递的参数) {//备注:这个可以获取预支付的订单,根据需要调用这个接口,可有前台向后台传递参数。然后后台根据需要进行处理。init();// 在这一步,可以传入一个订单Id,自行去搜索订单信息,并填写以下内容PayOrder payOrder = new PayOrder();// 这个就是支付成功后,在微信支付里面返回的信息(支付订单信息)// 一下内容需要分情况而定,自行填写。payOrder.setSubject("商品名称");payOrder.setBody("商品描述");payOrder.setAddition("附加信息");payOrder.setPrice(new BigDecimal(0.2));// 价格payOrder.setOutTradeNo("商户订单号");payOrder.setBankType("银行卡类型");payOrder.setDeviceInfo("设备信息");payOrder.setSpbillCreateIp("支付创建ip");// 可用IPUtils.getIpAddr(request)payOrder.setOpenid("用户微信openid");payOrder.setTransactionType(WxTransactionType.JSAPI);// 支付方式Map orderInfo = service.orderInfo(payOrder);// 返回创建的订单信息logger.debug("获取预支付订单信息回参" + orderInfo.toString());// 可自行选择 ,是否将支付的流水插入到数据库中。返回的信息由:signType appId timeStamp nonceStr package signreturn R.ok().put("orderInfo", orderInfo);}/*** 这就是支付回调地址* * @param request* @return* @throws IOException*/@ApiOperation("回调地址")@RequestMapping(value = "weixinpayBack")public String payBack(HttpServletRequest request) throws IOException {init();// 获取支付方返回的对应参数Map<String, Object> params = service.getParameter2Map(request.getParameterMap(), request.getInputStream());if (null == params) {logger.debug("通知失败");return service.getPayOutMessage("failed", "通知失败").toMessage();}logger.debug("微信公众号支付结果通知:" + params.toString());// 校验if (service.verify(params)) {// 这里处理业务逻辑 支付成功后的代码逻辑块// ......业务逻辑处理块........logger.debug("通知支付成功");return service.getPayOutMessage("success", "支付成功").toMessage();}logger.debug("通知支付失败");return service.getPayOutMessage("fail", "支付失败").toMessage();}@ApiOperation("微信公众号退款")@RequestMapping(value = "weixinAccRefund")public R weixinRefund(这里可以写前台需要向后台传递的参数) {init();RefundOrder refundOrder = new RefundOrder();//退款订单信息refundOrder.setRefundNo("退款单号,每次进行退款的单号,此处唯一");refundOrder.setTradeNo("支付平台订单号,交易号");refundOrder.setOutTradeNo("商户单号");refundOrder.setRefundAmount(new BigDecimal(0.2));//退款金额refundOrder.setTotalAmount(new BigDecimal(0.5));//订单总金额refundOrder.setOrderDate(new Date());//退款交易日期refundOrder.setDescription("退款说明");Map<String, Object> refund = service.refund(refundOrder);//微信退款//退款成功后,写其他的逻辑logger.debug("微信公众号退款结果:=" + refund.toString());return R.ok();} }

基于springboot的微信公众号JSAPI支付相关推荐

  1. java微信公众号JSAPI支付以及所遇到的坑

    java微信公众号JSAPI支付以及所遇到的坑 上周做了个支付宝微信扫码支付,今天总结一下.微信相比支付宝要麻烦许多 由于涉及到代理商,没办法,让我写个详细的申请流程,懵逼啊. 笔记地址 http:/ ...

  2. 关于微信公众号jsapi支付传值的问题

    刚开始接触微信公众号没有多久,只是做了一些简单的操作,如页面显示,近期,需要做一个微信公众号的支付功能,对于小白的我是很痛苦的,忍着痛,勇敢的往上爬. 首先上网查资料,找demo,之前几天一直没有信心 ...

  3. 微信公众号jsapi支付

    最近要弄个微信公众号支付,于是百度了很多,总结了一下 package com.github.lly835.controller.l;import java.text.SimpleDateFormat; ...

  4. php ci框架 微信公众号 JSAPI支付

    打开微信商户平台的开发文档,下载php版的SDK与Demo 准备好参数: 1:微信公众号AppID, 2:微信公众号AppSecret, 微信公众平台,商户平台添加好项目授权地址等内容 首先获取用户o ...

  5. 基于springboot的微信公众号管理系统(支持多公众号接入)

    微信公众号管理系统,支持多公众号接入.提供公众号菜单.自动回复.公众号素材.模板消息.CMS等管理功能 项目说明 是一个轻量级的公众号开发种子项目,可快速接入微信公众号管理功能 swagger文档(启 ...

  6. esaywechat 微信公众号jsapi支付

    //安装 composer require "overtrue/laravel-wechat:~4.0" 在 config/app.php 注册 ServiceProvider 和 ...

  7. 微信jsapi支付获取code_微信公众号JSAPI支付大致流程

    一:配置参数 申请成功后,获取接口文件, 将所有文件放入项目根目录weixin下,在WxPay.ub.config.php中填入配置账户信息; 二:设置授权 开发者中心->网页服务->网页 ...

  8. springboot实战-微信公众号开发

    sell 基于springboot的微信公众号系统,旨在学习springboot以及微信公众号开发相关知识 包含: springboot:表单验证.统一异常处理.事物管理.restful Api开发 ...

  9. SpringBoot开发微信公众号

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 在讲微信公众号开发之前,先来大概了解一下微信公众号.微信公 ...

最新文章

  1. java 增量,Java增量运算符查询(++ i和i ++)
  2. POI文件导入:代码实现-解析Excel构造用户列表
  3. NEFU709(第K个圆的半径)
  4. Oracle的分页实现
  5. python实例讲解wxpythonhyh123_Python实例讲解 -- wxpython 基本的控件 (按钮)
  6. 蓝牙连接不上车要hfp_鹅厂又要霸屏,连接四部剧将袭,冲着主创颜值不追不行啦...
  7. 小公司出身的我,是如何拿下知名独角兽公司 Offer?
  8. java合并后求和_Java8使用stream实现list中对象属性的合并(去重并求和)
  9. 数据中心里的布线槽设计学问
  10. NYOJ64 - 鸡兔同笼
  11. 股票基金历史数据下载接口集合
  12. 量化指标公式源码_通达信博尔量化指标 看了就明白 源码
  13. CodeProject上的一些摘抄
  14. 【gflags】【gflags实践】【gflags的学习使用记录】
  15. java解析MT940报文,swift MT报文解析处理
  16. 基于欧拉-拉格朗日方程的机器人动力学模型
  17. kaggle入门--泰坦尼克号之灾(手把手教你)
  18. Python趣味脚本,做一个简单的抽奖刮刮卡
  19. ElasticSearch系列——Kibana,核心概念
  20. Python-音乐播放器APP制作

热门文章

  1. EV代码签名证书的价格
  2. Linux 7.X 各个版本的下载地址
  3. (附源码)php企业招聘网站 毕业设计222219
  4. 科技金融之成长烦恼解忧
  5. WINCE_.NET CF 示例集锦
  6. 揭秘!从iphone8的上市看苹果的供应链!
  7. 魅族android m lmx4,主流级方案、骁龙425:LG 韩国发布 X4 智能手机
  8. MUV LUV UNLIMITED(ccpc 秦皇岛2019)
  9. PHP内存马技术研究与查杀方法总结
  10. 利用ESP8266制作环境监测系统+APP inventor制作手机App实时显示