小程序支付开发指引
https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_2.shtml
说明:写的比较乱,如果有问题或者不懂的地方,艾特我就行。
创建预支付ID
/*
创建支付信息表
返回值为:map前端直接调用即可完成支付
PlatPay :这是一个实体类,用来存放调用微信支付所传递的信息,最下面有实体类
*/
@Override
@Transactional
public Map insertPlatPayReturnJson(PlatPay platPay){
//工具类
PayUtils payUtils = new PayUtils();
//返回给前端的必要参数
Map<String, Object> map = new HashMap<String, Object>();
platPay.setCreateTime(DateUtils.getNowDate());
try {
//1、生成预支付ID
String prepay_id = payUtils.CreateOrder(platPay.getOrderAmount(), platPay.getPayDescription(), platPay.getOpenid(), platPay.getOrderNumber());
if(ObjectUtils.isEmpty(prepay_id)) {
return map;
}else {
//2、预支付ID不为空,生成返回值信息
map = payUtils.returnToReceptionJson(platPay.getOrderNumber(), prepay_id);
//这是自己的逻辑结构了======3、插入支付信息表
platPayMapper.insertPlatPay(platPay);
//System.out.println("map++++"+map.toString());
return map;
}
}catch (Exception e){
e.printStackTrace();
return map1;
}
}else {
return map1;
}
工具类
package com.ruoyi.common.utils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.ruoyi.common.constant.PayConfig;
import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
import com.wechat.pay.contrib.apache.httpclient.auth.AutoUpdateCertificatesVerifier;
import com.wechat.pay.contrib.apache.httpclient.auth.PrivateKeySigner;
import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Credentials;
import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Validator;
import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import org.gavaghan.geodesy.Ellipsoid;
import org.gavaghan.geodesy.GeodeticCalculator;
import org.gavaghan.geodesy.GeodeticCurve;
import org.gavaghan.geodesy.GlobalCoordinates;
import org.springframework.security.core.parameters.P;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.text.SimpleDateFormat;
import java.util.*;
import org.junit.After;
import org.junit.Before;
/**
* @author fj
* @date 2022-09-24 08:54
* @description 微信支付工具类
*/
public class PayUtils {
/**
* 获取签名中的方