小程序微信退款
老规矩写之前阅读官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4
1、开发准备-下载证书
1.1证书下载之后在本地是这样的
选择.p12格式的文件放到配置文件的证书路径(SSLCERT_PATH)
2、开发过程-配置文件
此处的配置文件可以参考上篇文章小程序微信支付,其中SSLCERT_PATH(证书路径)和SSLCERT_PASSWORD(密码)就是所需的参数,路径直接填本地文件所在的路径即可(比如:C:/Users/Administrator/Downloads/WXCertUtil/cert/1521091331_20190114_cert/apiclient_cert.p12)
#微信的配置参数
APPID=微信公众平台中
#开发者密码
APPSECRET=微信公众平台中
#微信商户号
MCH_ID=客户开通的商户号
#交易类型
TRADE_TYPE=JSAPI(公众号和小程序都能用次类型)
#微信退款回调地址
#REFUND_NOTIFY_URL = 退款成功回调地址
#签名方式
SIGN_TYPE=MD5
#微信支付商户密钥
KEY=商户平台中下载证书的时候设置的密钥
#证书路径
SSLCERT_PATH = 证书路径
#默认密码 默认为商户号
SSLCERT_PASSWORD = 商户号
3、WXAuthUtil 参考上篇微信付款中的WXAuthUtil文件,其中SSLCERT_PATH、SSLCERT_PASSWORD、REFUND_NOTIFY_URL
4、记重点!!!调用证书
public class ClientCustomSSL {
@SuppressWarnings("deprecation")
public static String doRefund(String url,String data) throws Exception {
/**
* 注意PKCS12证书 是从微信商户平台-》账户设置-》 API安全 中下载的
*/
KeyStore keyStore = KeyStore.getInstance("PKCS12");
/**
*此处要改
*wxconfig.SSLCERT_PATH : 指向你的证书的绝对路径,带着证书去访问 ===========要修改
*/
FileInputStream instream = new FileInputStream(new File(WXAuthUtil.SSLCERT_PATH));//P12文件目录
try {
/**
* 此处要改
*
* 下载证书时的密码、默认密码是你的MCHID mch_id===========要修改
* */
keyStore.load(instream, WXAuthUtil.SSLCERT_PASSWORD.toCharArray());//这里写密码
} finally {
instream.close();
}
/**
* 此处要改
* 下载证书时的密码、默认密码是你的MCHID mch_id
* */
SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(keyStore, WXAuthUtil.SSLCERT_PASSWORD.toCharArray())//这里也是写密码的
.build();
// Allow TLSv1 protocol only
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext,
new String[] {
"TLSv1" },
null,
SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
CloseableHttpClient httpclient = HttpClients.custom()
.setSSLSocketFactory(sslsf)
.build();
try {
HttpPost httpost = new HttpPost(url); // 设置响应头信息
httpost.addHeader("Connection", "keep-alive");
httpost.addHeader("Accept", "*/*");
httpost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
httpost.addHeader("Host", "api.mch.weixin.qq.com");
httpost.addHeader("X-Requested-With", "XMLHttpRequest");
httpost.addHeader("Cache-Control", "max-age=0");
httpost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
httpost.setEntity(new StringEntity(data, "UTF-8"));
CloseableHttpResponse response = httpclient.execute(httpost