文章目录结构
一、引言
这两大支付可以说已经深深融入我们每个人的生活了,但做程序员的我们来说,掌握对接微信支付、支付宝支付是一个很大的优势,现在小编的衣食住行基本上是离不开它们的,出行就是滴滴、吃饭就是美团饿了么,购物就是淘宝京东!!!
所以为了更进一步的了解对接微信支付、支付宝支付的整体流程,小编将会把自己的亲身对接的经验,以开发SDK的方式来分享给大家。
首先小编来介绍一下这个支付的SDK能够实现什么样子的功能:
第一:核心功能,能够快速实现微信、支付宝支付功能(最后10行代码带你搞定支付)。
第二:处理微信、支付宝异步回调通知。
第三:实现订单查询、下载对账单等功能。
本SDK将会从项目搭建、项目架构讲解、微信支付介绍、支付宝支付介绍、支付代码实现和封装、单元测试等等来介绍。
能够收获什么?
跟着小编一起来开发sdk,可以熟悉对接支付宝、微信支付的模式,以及最最最常见支付接口。最后完成的SDK项目完全可以打包成jar包,来提供给公司项目使用,只需要简单配置则可以快速实现支付功能~~~
准备好要起飞小伙伴可以,点一波关注,不迷路哈哈哈哈哈哈 ,来嘛小编求求你点个关注了~~~
二、内容介绍
项目搭建章节:本项目采用现在主流的SpringBoot项目,符合目前市场需求, 从零开始搭建SpringBoot项目,配置依赖,项目技术点讲解。
项目架构设计章节:本章会对SDK项目设计,进行一个拆分讲解,并且搭建基本项目结构。可以让小伙伴们一眼看懂项目整体分层。
微信支付章节:详细讲解微信对接模式,微信对接文档、代码实现微信支付、异步处理、订单查询等功能。
支付宝支付章节:详细讲解支付宝对接模式以及对接文档,最后手把手代码实现。
这里小编是从零开始讲,其中会包含讲解对接支付需要哪些参数,需要调用哪些接口,以及接口的请求参数的封装、签名生成、签名校验、数据加密、xml响应结果解析,也会特别提醒,在对接时候需要注意的细节部分。 完全适合还没接触过支付的小伙伴们学习~~~
说了那么多,小编给大家写个测试类看看效果吧~~
以最常见微信扫码支付为例,配置微信支付的基本数据配置、订单基本信息,指定支付方式,最后调用bestPayService.pay()方法,则可以实现相对应的支付功能,从此让支付变成so easy。
/**
* @Auther: IT贱男
* @Date: 2019/12/19 16:03
* @Description: 微信接口测试
*/
@SpringBootTest
@RunWith(SpringRunner.class)
public class WxPayService {
@Test
public void contextLoads() {
// 微信支付配置
WxPayConfig config = new WxPayConfig();
config.setAppId("wxd898fcb017******");
config.setMchId("148346****");
config.setMchKey("098F6BCD4621D373C**********");
config.setNotifyUrl("http://baidu.com");
BestPayServiceImpl bestPayService = new BestPayServiceImpl();
bestPayService.setWxPayConfig(config);
// 配置订单信息
PayRequest request = new PayRequest();
request.setOrderId("3432423423");
request.setOrderAmount(Double.valueOf("0.01"));
request.setOrderName("测试商品测试商品");
request.setPayTypeEnum(BestPayTypeEnum.WXPAY_NATIVE);
//发起支付,返回支付相关结果数据
PayResponse pay = bestPayService.pay(request);
// 获取支付二维码 (最终需要前台转成二维码进行显示)
System.out.println(pay.getCodeUrl());
}
}
三、项目技术介绍
小编所使用环境:Mac 操作系统、JDK版本1.8、SpringBoot版本 2.1.7.RELEASE、Maven、IDEA2017版本
哎,小伙伴前提需要具有Java开发经验啦,需要了解以下技术的使用:
lombok的使用
小伙伴在写一个实体类的时候,还在生成Get、Set方法吗? 那你就落伍啦。
首先引入lombok的依赖,并且idea下载lombok插件,最后能按照小编提供的截图中搜索到插件即可。
lombok的时候基本上都是采用注解的形式,比如说最后小编OrderQueryRequest实体类上,加上了@Data注解,则可以省略生成get、set、toString等方法。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
/**
* @Auther: IT贱男
* @Date: 2019/12/20 16:04
* @Description: 支付订单查询
*/
@Data
public class OrderQueryRequest {
/**
* 支付平台
*/
private BestPayPlatformEnum bestPayPlatformEnum;
/**
* 订单号 商户订单 二选一
*/
private String orderId;
/**
* 外部订单号 二选一
*/
private String outOrderId;
}
Retrofit2网络框架的使用
小编这个项目中所使用的HTTP请求都是采用Retrofit2网络框架的使用。这里给大家提前透露一下微信中所包含的接口都是以<xml>的格式来进行交互,而使用Retrofit可以配置不同反序列化工具类来解析不同的数据,总的来说小编感觉时候这个框架比较方便~~
详细学习内容,可以参考试一下CSDN另外一个博主的文章:https://blog.csdn.net/m0_37796683/article/details/90702095
这个是项目部分代码展示,定义了所需要请求微信接口的API定义。
/**
* @Auther: IT贱男
* @Date: 2019/12/19 15:12
* @Description: 微信API
*/
public interface WxPayApi {
/**
* 统一下单
*
* @param body
* @return
*/
@POST("/pay/unifiedorder")
Call<WxPayUnifiedorderResponse> unifiedorder(@Body RequestBody body);
}
四、项目搭建
第一步:采用IDEA快速构建Springboot项目,填写项目信息、依赖可以不用选择,一直到完成就行啦。 相信小伙伴们都有经验创建一个springboot项目了,后面步骤小编就不一一截图了。
第二步:这个是本项目所采用的全部依赖,希望小伙伴们能够和小编保持一致,尤其是springboot的版本。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.kane</groupId>
<artifactId>sdk</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>best-pay-sdk</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.simpleframework</groupId>
<artifactId>simple-xml</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>converter-gson</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>converter-simplexml</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
五、骗一波关注
该项目会讲解基本对接微信、支付宝的模式和具体代码实现,如果是你有开发支付经验的大牛则可以指点指点,如果小伙伴是完全没有接触支付功能,并且又想学习开发支付。 那么你就来对了,小编会带你由浅入深,由项目的搭建到项目打包成jar对外提供使用。
如果想接着学习,可以点一波关注,本项目小编大概会分6 ~ 8 篇文章进行讲解,以及代码演示。
关注、点赞、分享~~~