微信退款 微信支付退款开发
开发微信退款有很多步骤。第一步是根据官方文档生成证书,然后以zip的形式下载。有时候想知道这个证书怎么用。其实发界面的时候带个证书就行了。举个具体的例子,以JSAPI微信退款为例。
1.第一步是提出退款申请
因为每次发起退款请求,都要带证明。如果直接从证书文件中读取内容,速度非常慢,所以将证书的内容存储在内存中。大致如下:
@Getter
@配置
公共类WxConfig {
/**
*微信支付,证书存储父路径证书名称:商户id_cert.p12商户ID _ cert . PEM商户id_key.pem
*/
@值
私有字符串apiCertLocation
/**
*从商户id_cert.p12文件中读取内容,并将其放入字节数组中。
*/
私有字节certData
/**
*将商户id_cert.p12文件的内容转换为流
* @返回
*/
public InputStream getCertStream引发IOException {
如果{
InputStream certStream =新文件InputStream
this . cert data = ioutils . tobytearray;
certStream.close
}
返回新的ByteArrayInputStream
}
}
以下是发送带有证书的请求:
InputStream cert stream = wxconfig . getcert stream;
string xmlResult = requestwitspicert,cert stream);
certStream.close
特定工具类别:
/**
*微信用API证书支付请求
* @返回
* @引发异常
*/
公共静态字符串请求with picert引发异常;
kmf.init
//创建SSLContext
SSLContext SSLContext = SSLContext . getinstance;
sslContext.init,null,new SecureRandom);
SSLConnectionSocketFactory SSLConnectionSocketFactory = new SSLConnectionSocketFactory);
连接管理器=新的基本客户端连接管理器
。寄存器)
。注册
。建造,
null,
null,
空
);
http client Http client = Http client builder . create
。setConnectionManager
。建造;
HttpPost httpPost = new HttpPost
request config request config = request config . custom . build;
httpPost.setConfig
严格性后严格性=新的严格性;
httpPost.addHeader
httpPost.setEntity
HttpResponse HttpResponse = Httpclient . execute;
HttpEntity HttpEntity = httpresponse . getentity;
返回EntityUtils.toString
}
在微信退款回拨中,有一个req_info字段需要解密后才能使用:
/**
*如果此方法报告错误:非法密钥大小或默认参数,请注意此方法
一般需要从oracle官网下载local _ policy . jarus _ export _ policy . jar
包,路径:jdk安装路径/jre/lib/security
* @param reqInfo
* @param apiKey
* @返回reqinfo的xml字符串
* @引发异常
*/
公共静态字符串getReqInfoXml引发异常{
密码= Cipher.getInstance
MessageDigest MD5 = MessageDigest . getinstance;
MD5 . update);
string key MD5 StrIng =))). ToStrIng . ToLowerCase;
secretkeysec密钥=新的secretkeysec,“AES”);
cipher.init
返回新字符串));
}