一、准备工作:
微信支付开发需要用到应用id(appid)、商户号(mch_id)和秘钥(key)、以及证书,这几个重要的参数需要从微信开发平台中去获得,在此不做赘述。
二、用户支付流程:用户在客户端中选择商品或者充值,提交订单,选择微信支付–>服务端收到用户支付订单,调用微信同意下单接口–>统一下单的接口返回appid_应用ID、partnerid_商户号、prepayid_预支付交易会话标识、package、noncestr_随机字符串和timestamp,而且都必须是小写–>客户端唤起微信支付–>服务端接收支付通知,处理业务逻辑–>服务端查询支付结果。
三、服务端代码编写:
在此我使用官方封装的SDK来进行开发,我的项目为maven项目
1、在pom.xml文件中添加如下配置:
<!-- 微信支付插件 -->
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>
2、编写配置文件,在调用官方封装的SDK的时候需要使用,代码如下:
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import com.github.wxpay.sdk.WXPayConfig;
public class WXConfigUtil implements WXPayConfig{
private byte[] certData;
public static final String APP_ID = "应用ID";
public static final String KEY = "秘钥";
public static final String MCH_ID = "商户ID";
public WXConfigUtil() throws Exception {
//String certPath = "D:/weixzhifu/1592702951_20200513_cert/apiclient_cert.pem";//从微信商户平台下载的安全证书存放的路径
String certPath = "/usr/java/weixzhifu/1592702951_20200513_cert/apiclient_cert.pem";
File file = new File(certPath);
InputStream certStream = new FileInputStream(file);
this.certData = new byte[(int) file.length()];
certStream.read(this.certData);
certStream.close();
}
@Override
public String getAppID() {
return APP_ID;
}
//parnerid,商户号
@Override
public String getMchID() {
return MCH_ID;
}
@Override
public String getKey() {
return KEY;
}
@Override
public InputStream getCertStream() {
ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData);
return certBis;
}
@Override
public int getHttpConnectTimeoutMs() {
return 0;
}
@Override
public int getHttpReadTimeoutMs() {
return 0;
}
}
3、服务端生成预支付订单和客户端支付后的异步回调
3.1、controller层代码:
@Autowired
private PaymentServiceI paymentService;
/**
* 微信支付
* 统一下单
* 官方文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
* @param user_id
* @param total_fee
* @return
* @throws Exception
*/
@ApiOperation(value = "微信支付")
@RequestMapping(value = "wxPay/", method = RequestMethod.POST, produces = "application/json")
@ResponseBody
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "phone", dataType = "String", required = true, value = "手机号"),
@ApiImplicitParam(paramType = "query", name = "id", dataType = "String", required = true, value = "充值金额id"),
@ApiImplicitParam(paramType = "query", name = "identification", dataType = "String", required = true, value = "是否优惠")})
public Result<Object> wxPay(HttpServletRequest request,@RequestParam String phone,
@RequestParam String id,@RequestParam String identification) throws Exception {
Result<Object> resu = new Result<Object>();
try {
String attach = "{\"phone\":\"" + phone + "\"}";
//请求预支付订单
Map<String, String> result = paymentServic

最低0.47元/天 解锁文章
3814

被折叠的 条评论
为什么被折叠?



