springboot⼩程序⽀付SDK版本⽀付统⼀下单
项⽬要求需要在⼩程序中添加⽀付的功能(⼩程序就不要想⽀付宝的事情了),折腾了半天,也在⽹上看了各位先⾏者的各种⽂章(强烈谴责⼀下摘取别⼈⽂章⼀半,当作⾃⼰⽂章的⼈,越看越头疼),记录⼀下这次的实验
张国立和张默1:登录⾸页,完成商户的注册
这个需要公司的⼀些材料(营业执照,法⼈,银⾏卡之类的),这⼀步是必须的,你要做⽀付,最起码得开通别⼈的服务才⾏
点击产品中⼼-查看我的产品 这⾥能看到所有产品,到你需要的就可以了,我这边只是做⼩程序的⽀付,默认开通的就够⽤
2:关联你的程序和商户号
要在⼩程序中使⽤商户的⽀付功能,就必须把⼩程序和某个商户关联起来,进⼊⼩程序管理——功能——⽀付
(进去后如果没有开通⽀付就要申请,不过我的默认开启的,⽹上有的⽂章说是要⾃⼰申请开通),点击关联更多商户号
注意,这⾥会跳回到你的商户的⽹站去,跳回的⽬录是产品中⼼-AppId账户管理
(我这⾥是已经关联了),点击关联AppId
江铠同是富二代在这个页⾯输⼊⼩程序的AppId(在⼩程序——开发——开发设置中)号,输⼊正确的话,会要求你输⼊⼩程序的注册认证主体(⼩程序注册时候企业主体的名字)
这⾥点击确认之后,在⼩程序那边确认绑定,这样就完成了关联,就能做下⼀步的开发了
3:SDK的问题
为了⽅便开发者开发,提供了⾃⼰的SDK(就是封装了⼀些使⽤⼯具,不⽤sdk也可以,但是你就得⼿⼯去写⼀些⽅法),但是这个SDK 没有上传到maven中央仓库去(但是在maven中央仓库能搜索到⽀付的sdk,⼀个是2017年的,还有个最新的,想⼀想算了,⽤⾃⼰的sdk⽐较保险,毕竟是钱相关的)点击
选择需要的版本下载,我这边选择的是java版本。下载完成后,你会得到⼀个zip包(WxPayAPI_JAVA.zip),点击解压缩,你会得到它的⼀个⼯程
其中reademe.md中包含了⾥边常⽤⽅法的demo(不过写的不清不楚,真的!~该你被飞车三⼈组骗),进去看看
这⾥是提供的所有的⽀付相关的类了。
我们的⼯程⼀般都是maven⼯程,所以我们需要对这个进⾏转换⼀下
1:打开编译器,将下载的这个⼯程转换成jar包
2:⽤maven命令将得到的jar包安装到maven本地仓库去
mvn install:install-file -Dfile=wxpay.jar -DgroupId=com.github.wxpay -DartifactId=wxpay-sdk -Dversion=3.0.9 -
Dpackaging=jar
注意上边-Dfile后边jar包所在的⽂件的路径 如果dos不再当前⽂件的当前⽬录,需要把⽂件路径补全了
在当前⼯程中使⽤mvn引⼊wx的jar包
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
umbrella
<version>3.0.9</version>
</dependency>
这样你的⼯程中就能正常使⽤⽀付的sdk的功能了
4:证书的问题
对外汉语教师资格
01:⽀付要求必须在https的请求中进⾏,所以第⼀步在服务器请求地址中去设置⼀下https证书(这个⾃⼰百度⼀下),http请求是不能访问的
02:需要在商户 账户中⼼-api安全去设置两个东西 分别为:设置API密钥和 api证书,其中密钥记录下来(程序中⽤),证书也下载下来(程序中需要读取)
下载下来的证书如下
解压缩包,得到三个⽂件,最重要的是⼀本apiclient_cert.p12的证书(别的两本我没⽤到。。。。),把这个⽂件丢到spring boot⼯程的resources ⽬录下边去
这样我们的证书问题就解决了
艾米 阿克5:配置的问题
要开始使⽤了,⾸先我们要为接⼊做配置,第⼀个需要配置的类为WXPayConfig 这个类是⽀付SDK提供的,但是我们需要在其中写⼊我们⾃⼰的参数
创建类:
public class MyConfig extends WXPayConfig
这⾥让我头疼的是,有的⽂章写的是 implements WXPayConfig这是⽐较⽼的使⽤了,这⾥WXPayConfig这个改成了抽象类,所以要继承。
这⾥还有个⼩细节,其实sdk使⽤有两种办法,⼀种是把下载sdk的类全部拷贝到你的⼯程中,第⼆种就是我刚才jar包的⽅式。
如果是jar的⽅式,⾃⼰写的这个配置类⼀定要放在和WXPayConfig这个类⼀样的路径下边(如果路径不⼀致,就会报错),所以我只能在⾃⼰的程序中创建⼀个⼀模⼀样的路径存放这个配置类,最终是这样的
com下创建了两个包,⼀个是以git开头的,另外⼀个是⾃⼰的⼯程的
全类如下:
package com.github.wxpay.sdk;
import com.github.wxpay.sdk.IWXPayDomain;
import com.github.wxpay.sdk.WXPayConfig;
import org.apachemons.io.IOUtils;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
@Component("myConfig")
public class MyConfig extends WXPayConfig {
private byte[] certData;
public MyConfig()throws Exception {
InputStream certStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("apiclient_cert.p12");//读取⽅才存放在resource西边的证书
certStream.close();
}
@Override
public String getAppID(){
贷款利息return"你⾃⼰的⼩程序Id号";
}
public String getMchID(){
return"你⾃⼰的商户ID号";
}
public String getKey(){
return"刚才在商户证书位置设置的密钥";
}
public InputStream getCertStream(){
ByteArrayInputStream certBis =new Data);
return certBis;
}
public int getHttpConnectTimeoutMs(){
return8000;
}
public int getHttpReadTimeoutMs(){
return10000;
}
@Override
IWXPayDomain getWXPayDomain(){
/
/必须实例化,否则WxPay初始化失败
IWXPayDomain iwxPayDomain =new IWXPayDomain(){
public void report(String domain,long elapsedTimeMillis, Exception ex){
}
public DomainInfo getDomain(WXPayConfig config){
return new IWXPayDomain.DomainInfo(WXPayConstants.DOMAIN_API,true);
}
};
return iwxPayDomain;
}
}
修改这⼏个参数之后就能使⽤了
6:开始放码