# 前篇大纲

以下会分几个步骤讲一下我学习微信支付的过程，也是一部辛酸史，也是希望朋友们不要再次跌进坑里，节省时间。

#### 1、公司需要

如标题一般，公司来了这么个需求，需要接入微信支付，那就必须搞定他了，相信大部分的小伙伴都是这样接触微信支付的吧。

首先我们需要明确一个需求，如果公司是做 App 支付，除了接入微信支付还需要接入支付宝、银联等第三方支付，那么就需要考虑几个问题，公司是选择自主开发还是借助第三方聚合支付（如Ping++），从成本等方面考虑，其实接入聚合支付也是一个不错的选择哦。

如果我们选择自主开发微信支付，那么问题就接踵而至，

```
什么是微信支付？
微信支付能做什么？
我们需要怎么实现它？
网络上是否有大神们写好的demo直接拿来即可？
微信官方是否提供了明确的文档？
```

上面的问题我们这个【浅析微信支付】都会将其一一解开，尽情期待！！！

#### 2、翻车现场

明确了要做微信支付后，我们第一时间当然是去找微信官方文档咯，地址如下： `https://pay.weixin.qq.com/wiki/doc/api/index.html`；

现在小程序非常火，我们就拿小程序来举例子吧，进入小程序支付的开发文档页面： `https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1`； 非常遗憾的是，微信的文档已知是给他们自己的程序员看的，如果是小白瞬间闯入，直接就是一脸懵，我到底该如何入手？？？黑人问号？？嗯？

莫慌！其实微信支付套路也很简单，他们是将简单问题复杂化了，生怕开发者看不懂，文档写的非常的详细（围笑）导致咋们不知如何入手，从这里开始一直到支付的所有环节都如此，文档真正关键的地方模模糊糊，细节上确实非常细致了。

下面讲一下我是如何去学习微信支付的。

#### 3、逼上梁山

绝对是逼上梁山的，简单讲，一个微信支付开发的流程如下： `https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=3`；

```
商户系统和微信支付系统主要交互：
1、小程序内调用登录接口，获取到用户的openid,api参见公共api【小程序登录API】
2、商户server调用支付统一下单，api参见公共api【统一下单API】
3、商户server调用再次签名，api参见公共api【再次签名】
4、商户server接收支付通知，api参见公共api【支付结果通知API】
5、商户server查询支付结果，api参见公共api【查询订单API】
```

上面几步中难点的在于第二步和第三步，中间会有一些坑，为何？举个例子，

```
微信支付接口文档中的参数有的是驼峰有的却是下划线但官方并没有强烈提示说明...
因为版本关系有些参数还会不一样...
对于再次签名所需要的参数和如何签名说的非常的简单，需要一再试错...
最大的问题是：对Java开发的支持并不怎么好，官方的 sdk demo 真的不能直接拿来就能用，真的就是个 demo...
```

没有经历过的朋友可能不太能体会这种感觉，真挺难受的；因为上面的问题无法解决只好手动百度+谷歌，然而问题来了，网上的文章同质化非常严重，往往点进去五篇文章，其中三篇都一毛一样啊，流泪...还有人出收费教程，这也是赚钱的好办法...

如上经历所以才有了这个系列的文章，当然最终我也在网络大神们的文章中筛选出了精华，实现了微信支付的大部分主体功能，足够满足常规的企业开发了。

#### 4、初衷

这个系列的文章其实早就有写的想法了，因为在我解决问题的过程中，遇到很多同行抱怨非常痛苦，但是实在是懒+并没有打磨到拿来即用的地步，现在自我感觉也差不多了，所以分享给大家。

下面会贴出我整理的这个系列主要功能点，如下所示：

```
1.浅析微信支付：前篇大纲
2.微信支付简单介绍
3.开发前的准备
4.统一下单接口
5.支付结果通知
6.查询订单
7.关闭订单
8.申请退款
9.退款结果通知
10.查询退款
11.下载对账单
12.下载资金账单

13.如何使用沙箱环境测试
14.支付验收指引
15.刷卡支付验收用例
16.扫码支付验收用例
17.公众号支付验收用例
18.免充值产品功能使用指引

19.(余额提现)企业付款到零钱资金使用商户号余额资金
20.商户平台-现金红包-发放普通红包
21.商户平台-现金红包-查询红包记录

22.商户平台-代金券或立减优惠-发放代金券
23.商户平台-代金券或立减优惠-查询代金券信息
24.商户平台-代金券或立减优惠-查询代金券批次

25.公众平台-微信卡券-创建卡券
26.公众平台-微信卡券-HTML5线上发券（JS-SDK接口）
27.公众平台-微信卡券-查看卡券详情

28.公众平台-社交立减金活动-概述
29.公众平台-社交立减金活动-开通产品权限
30.公众平台-社交立减金活动-完成免充值模式验收
31.公众平台-社交立减金活动-创建代金券并设置跳转小程序
32.公众平台-社交立减金活动-创建支付后领取立减金活动接口

番外篇：
1.微信公众号网页授权
2.微信公众号模板消息发送
3.生成永久无限制微信小程序二维码
4.多个微信公众号同一商户平台的支付处理
5.微信退款时jdk更换安全包的处理
6.微信支付 MD5、HMACSHA256、SHA1、AES 加解密工具类
```

对于以上功能点的说明只会多不会少，可能其中还会穿插一些遇到的问题或异常处理，数据库和业务处理逻辑等等；

我也创建了一个微信群来提供给大家交流，一起共同进步吧。

#### 结语

希望这个系列文章能给大家带来一些启发，帮助解决一些问题，与君共勉！！！

如果想要提前一览源码的小伙伴，可以先看看我的 github，地址如下：`https://github.com/YClimb/wxpay-sdk/blob/master/README.md`

加作者私人微信，作者微信号如下 `yclimb`，回复 `微信支付` 可拉入微信支付讨论群与小伙伴一起探讨哦，一定要标明 `微信支付` 哦～

到此本文就结束了，关注公众号查看更多推送！！！

![关注我的微信公众号](https://4133728174-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQrNapB5MwT2_9vMe0o%2F-LQrp3R3atw5NqpxWP-k%2F-LQrpC_qLOLl3TOaL1kV%2F%E4%BA%8C%E7%BB%B4%E7%A0%81.jpg?alt=media\&token=c02d093b-9bde-4f33-a92a-ca9d927431e1)
