微信支付接口开发go语言 微信支付接口代码( 二 )


对新接触微信支付的企业来说 , 申请微信支付还是一个比较头疼的事情,遇到申请失败或被驳回、没有备案的公司网站网址域名、需要网站授权函、类目不会选择导致未通过,都可以通过黑河马进行协助解决 , 代申请包通过 。
微信支付后端篇微信支付系列文章
微信支付-java后端实现
微信支付-vue 前端实现
java demo: 下载地址文章底部
技术栈
Spring boot
java
XML (微信在http协议中数据传输方案)
MD5 签名
微信支付术语
openid (OpenID是公众号一对一对应用户身份微信支付接口开发go语言的标识)
app_id (公众号id微信支付接口开发go语言,登录微信公众号–开发–基本配置中获得微信支付接口开发go语言;)
key (收款商户后台进行配置,登录微信商户平台–账户中心–API安全-设置秘钥,设置32位key值微信支付接口开发go语言;)
mch_id (收款商家商户号;)
certPath (API证书, 登录微信商户平台–账户中心-API安全-下载证书)
后端流程
服务端需要的核心操作, 总共分为以下几步:
统一下单
前端调起微信支付必要参数 (需加密)
订单结果主动通知 (回调接口)
查询订单结果
结束订单支付接口(关闭订单,支付订单关闭)
代码
微信总共支持多种语言的sdk, 在可以下载例子, java程序也可以引入微信支付的sdk包, 但是github上的sdk已经很久没有更新了, 最好的选择, 也是我的选择, 在上下载sdk项目, 将其中所有java类copy到自己的项目中.
sdk下载目录
链接: 商户平台首页
#### 根据微信sdk生成配置类 WXPayConfig
创建IWxPayConfig.class, 继承sdk WXPayConfig.class, 实现sdk中部分抽象方法, 读取本地证书, 加载到配置类中.
package core.com.chidori.wxpay;
import core.com.wxpay.IWXPayDomain;
import core.com.wxpay.WXPayConfig;
import core.com.wxpay.WXPayConstants;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
@Service
public class IWxPayConfig extends WXPayConfig { // 继承sdk WXPayConfig 实现sdk中部分抽象方法
private byte[] certData;
@Value("${vendor.wx.config.app_id}")
private String app_id;
@Value("${vendor.wx.pay.key}")
private String wx_pay_key;
@Value("${vendor.wx.pay.mch_id}")
private String wx_pay_mch_id;
public IWxPayConfig() throws Exception { // 构造方法读取证书, 通过getCertStream 可以使sdk获取到证书
String certPath = "/data/config/chidori/apiclient_cert.p12";
File file = new File(certPath);
InputStream certStream = new FileInputStream(file);
this.certData = https://www.04ip.com/post/new byte[(int) file.length()];
certStream.read(this.certData);
certStream.close();
}
@Override
public String getAppID() {
return app_id;
}
@Override
public String getMchID() {
return wx_pay_mch_id;
}
@Override
public String getKey() {
return wx_pay_key;
}
@Override
public InputStream getCertStream() {
return new ByteArrayInputStream(this.certData);
}
@Override
public IWXPayDomain getWXPayDomain() { // 这个方法需要这样实现, 否则无法正常初始化WXPay
IWXPayDomain iwxPayDomain = new IWXPayDomain() {
@Override
public void report(String domain, long elapsedTimeMillis, Exception ex) {
}
@Override
public DomainInfo getDomain(WXPayConfig config) {

推荐阅读