1. 前言

距离上次发原创分享应该有 12 天了,最近忙里忙外的,无论是 Spring Security OAuth2 相关的,还是微信支付相关的都留了很多坑没有来得及去补,所以十分抱歉。今天得空赶紧分享一些有用的东西。今天就分享一下关于微信支付代金券的一些开发知识。

2. 微信支付营销

微信支付提供了商家券、代金券、立减金等营销能力来帮助商家进行拉新保活,增强与用户的互动性。从开发层面上来说比接入微信支付要难一些,而且涉及的策略也会更多一些。那么本次分享胖哥将分享自己的一些经验。

3. 开发前准备

开发前我们需要申请微信支付相关的账号,手续还是比较多的。

微信商户账号

地址为https://pay.weixin.qq.com 用来开通微信支付能力,没有商户号是无法使用微信支付的。而且后续申请的公众号 appid 和移动应用、小程序的 appid 都要同微信商户帐号进行绑定。

微信开放平台账号

地址为https://open.weixin.qq.com 用来开发第三方平台、移动应用、公众平台、网站应用的开发。后续申请的微信公众号服务号、移动应用 appid 需要绑定到开放平台中。

微信公众平台服务号

通过https://mp.weixin.qq.com申请, 切记是服务号,不是订阅号,也不是个人号!服务号才是企业开发用的。申请认证完毕后需要同微信商户帐号和微信开放平台帐号进行绑定。

具体的操作步骤去查看官方指引,总之需要准备的材料是比较多的,而且走的流程也比较多,需要专人去办理。

4. 微信支付 V3

在之前对微信支付 V3 的一些难点胖哥也做了一些介绍。其实这个东西你研究了才会发现,无论微信支付也好还是支付宝也好都是下面的流程:

  1. 收集对应 API 的参数。

  2. 对参数进行签名。

  3. 请求对应的 API

  4. 对响应的来源的验证以确保响应来自支付服务器。

  5. 对响应进行解析。

  6. 对回调请求的响应。

所以针对上面的流程,胖哥做了一个小小的模型设计,以代金券创建为例:

/*** 创建代金券批次API.** @param params the params* @return the wechat response entity*/
public WechatResponseEntity<ObjectNode> createStock(StocksCreateParams params) {WechatResponseEntity<ObjectNode> wechatResponseEntity = new WechatResponseEntity<>();// 1. 根据请求类型组织参数this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_COUPON_STOCKS, params)// 2. 对参数进行归纳处理.function(this::createStocksFunction)// 3. 嵌入对结果进行消费的逻辑.consumer(wechatResponseEntity::convert).request();return wechatResponseEntity;
}

无论微信支付 V3 的哪个 API 都可以按照上面的模型进行封装。

5. 微信支付开发包

针对上面的设计,以 Spring Boot Starter 的形式封装了一个开发包,第三方依赖几乎为零。仅仅使用了 Spring 框架提供的RestTemplateJackson类库。目前对代金券封装已经结束并进行了测试,其它的 API 封装只剩下体力活了,我会尽快完善。

github : https://github.com/NotFound403/payment-spring-boot.git

集成

Spring Boot Starter的形式集成到项目中,目前并没有提交到 maven 中央仓库,需要自己编译安装。

      <dependency><groupId>cn.felord</groupId><artifactId>payment-spring-boot-starter</artifactId><version>1.0.0.RELEASE</version></dependency>

配置

在 Spring Boot 项目中的application.yaml中配置wechat.pay相关参数。

wechat:pay:v3:
#  应用appId 必填app-id: xxxxxxxx
#  api 密钥 必填app-secret: xxxxxxxxxxx
#  api v3 密钥 必填app-v3-secret: xxxxxxxx
#  微信支付商户号 必填mch-id: xxxxxxx
#  合作商 选填partner-key:
#  商户服务器域名 用于回调  需要放开回调接口的安全策略 必填domain: https://xxxx.xxx.com
#  商户 api 证书 必填cert-path: apiclient_cert.p12
#  微信服务号 优惠券必须mp:app-id: xxxxxxxxxapp-secret: xxxxxxxxxxxxxxxxxxx

然后启用@EnableWechatPay注解:

@EnableMobilePay
@Configuration
public class PayConfig {
}

请注意:只有wechat.pay.v3.app-id设置了有效值才能启用下面的 API。

API 使用

微信支付 V3 开放接口引入:

    // 支付API@AutowiredWechatPayApi wechatPayV3Api;// 营销API@AutowiredWechatMarketingApi  wchatMarketingApi;

例如查询优惠券

     // 查询商户下的优惠券@Testpublic void v3MchStocks() {StocksQueryParams params = new StocksQueryParams();params.setOffset(0);params.setLimit(10);WechatResponseEntity<ObjectNode> objectNodeWechatResponseEntity = wechatPayV3Api.queryStocksByMch(params);System.out.println("objectNodeWechatResponseEntity = " + objectNodeWechatResponseEntity);}

如果你在微信支付中有什么疑问可以给我留言,知无不答。感谢对胖哥的关注。

Java中的微信支付(3):API V3对微信服务器响应进行签名验证

Java中的微信支付(2):API V3 微信平台证书的获取与刷新

Java中的微信支付(1):API V3版本签名详解

Java微信支付V3 DEMO分享相关推荐

  1. java微信支付v3系列——6.微信支付查询订单API

    目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...

  2. java微信支付v3系列——1.微信支付准备工作

    目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...

  3. java微信支付v3系列——4.创建订单的封装及使用

    目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...

  4. java微信支付v3系列——7.微信支付之申请退款

    目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...

  5. java微信支付v3系列——8.微信支付之退款成功回调

    目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...

  6. java微信支付v3系列——5.微信支付成功回调

    目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...

  7. java微信支付v3系列——3.订单创建准备操作

    目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...

  8. 微信公众号之微信支付(V3版)jsp页面jsapi统一下单调启支付(java版)

    web项目 按顺序一步一步来 准备: 申请了微信支付接口的微信公众号一枚 , 备案的域名网站一枚, (如果有没有的这两个东西会耽误你很久,因为微信支付必须是线上,无法本地调试,) 这里说一下 如果有经 ...

  9. 微信支付V3版 java

    微信支付V3版 1.引入依赖 2.创建时间工具类 DateTimeZoneUtil.class 3.解密工具类 AesUtil.class 4.对外暴露方法 公共参数 4-1.支付下单 V3PayGe ...

最新文章

  1. python两个切片合并_Python中numpy的布尔判断、合并、切片及一般函数,通用
  2. 关于可迭代对象、迭代器和生成器
  3. 关于RAC中监听配置IP=FIRST的说明
  4. python r语言培训_r语言和python学哪个
  5. kubernetes权威指南_如何快速上手成为大厂标配的kubernetes?
  6. java基础代码实例_java学习之web基础(3):Servlet 和 Request的登录处理实例
  7. liux环境下配置jdk
  8. 艾伟:WinForm控件开发总结(三)------认识WinForm控件常用的Attribute
  9. 极速PDF编辑器提示缺少字体如何解决
  10. JS禁止右键、CTRL+C、查看源文件
  11. uncode-schedule 学习
  12. QLineEdit控件添加提示语
  13. 函数mmap()的使用
  14. 「深度神经网络」(deepamp;nbs…
  15. 《计算机组成原理》课程学习(7)——第3篇 中央处理器——第7章 指令系统
  16. OOALV中字段设置ALV中下拉列表列的实现
  17. 题目26: 孪生素数问题
  18. 沣东新城镐京遗址规划_潜力无限?沣东新城凭什么就成了热门?!
  19. Mac Sublime Text 3中文汉化
  20. 简单交通灯识别Traffic-Light-Classify

热门文章

  1. DAO:“动态仲裁”能否解决投票冷漠问题?
  2. springboot连接两个或多个数据库
  3. 手把手教你使用anaconda安装pytorch环境(适合新手)
  4. 【pytorch入门】Anaconda安装+pytorch安装+pycharm安装教程
  5. SSL 2406 2408 约数 比萨
  6. Python爬取豆瓣Top250电影可见资料并保存为excel形式
  7. ICPC沈阳打铜总结
  8. TP5.1钩子的实现以及TP6.0事件的原理
  9. LIST集合初始化及常见方法
  10. 性能提升400倍丨外汇掉期估值计算优化案例