支付寶后續(xù)接口都要升級(jí)到公匙證書(shū)模式,今天折騰了一下

QQ20191231-101056@2x.png

QQ20191231-101545@2x.png

QQ20191231-101803@2x.png
綠色框里的三個(gè)文件是生成工具生成csr文件輸出的,其中私匙內(nèi)容(字符串)下面代碼要用
橙色框里的是支付寶后臺(tái)上傳csr后,下載得到的3個(gè)文件,包括阿里公匙證書(shū),阿里根證書(shū),自己應(yīng)用的根證書(shū). 這三個(gè)文件下面代碼也要用.
java版本sdk maven 配置
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.40</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.64</version>
</dependency>
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.8.103.ALL</version>
</dependency>
java代碼
import com.alipay.api.AlipayApiException;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayFundTransUniTransferModel;
import com.alipay.api.domain.Participant;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.internal.util.AntCertificationUtil;
import com.alipay.api.internal.util.file.FileUtils;
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import java.io.File;
import static com.alipay.api.internal.util.file.Charsets.UTF_8;
public class PayTestMain {
public static void main(String args[]) {
PayTestMain genCode = new PayTestMain();
try {
// genCode.sandTran();
genCode.readSnInfo();
} catch (Exception e) {
e.printStackTrace();
}
}
//讀取app公匙序列號(hào) 和 根證書(shū)序列號(hào)
private void readSnInfo() {
try {
System.out.println("app_cert_sn=" + AlipaySignature.getCertSN(
"換成絕對(duì)路徑/appCertPublicKey_xxxxxxxx.crt"));
String rootCertContent = FileUtils.readFileToString(new File("換成絕對(duì)路徑/alipayRootCert.crt"),
UTF_8);
System.out.println("alipay_root_cert_sn=" + AntCertificationUtil.getRootCertSN(rootCertContent));
} catch (Exception e1) {
e1.printStackTrace();
}
}
//轉(zhuǎn)賬功能實(shí)現(xiàn),
//換成正式地址及配置一樣使用
private void sandTran() throws AlipayApiException {
String sand_pro_key ="私匙文本字符串";
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
//這個(gè)是沙箱環(huán)境的地址
//正式的是 https://openapi.alipay.com/gateway.do
certAlipayRequest.setServerUrl("https://openapi.alipaydev.com/gateway.do");
certAlipayRequest.setAppId("你的APPID");
certAlipayRequest.setPrivateKey(sand_pro_key);
certAlipayRequest.setFormat("json");
certAlipayRequest.setCharset("UTF-8");
certAlipayRequest.setSignType("RSA2");
//上傳csr文件后 完成配置,支付寶后臺(tái)能下載3個(gè)文件
// 應(yīng)用公匙
certAlipayRequest.setCertPath("換成絕對(duì)路徑/appCertPublicKey_xxxxxxxx.crt");
// 支付寶公匙
certAlipayRequest.setAlipayPublicCertPath("換成絕對(duì)路徑/alipayCertPublicKey_RSA2.crt");
//支付寶 根 公匙
certAlipayRequest.setRootCertPath("換成絕對(duì)路徑/alipayRootCert.crt");
DefaultAlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
//這里測(cè)試的是轉(zhuǎn)賬功能 其他接口參考文檔
AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
model.setOutBizNo("" + System.currentTimeMillis());
model.setProductCode("TRANS_ACCOUNT_NO_PWD");
model.setBizScene("DIRECT_TRANSFER");
Participant participant = new Participant();
participant.setIdentity("chwhpi1916@sandbox.com");
participant.setIdentityType("ALIPAY_LOGON_ID");
participant.setName("沙箱環(huán)境");
model.setPayeeInfo(participant);
String totalAmount = "0.20";
model.setTransAmount(totalAmount);
model.setRemark("測(cè)試單筆轉(zhuǎn)賬到支付寶");
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
request.setBizModel(model);
//這里必須添加 app公匙證書(shū)的序列號(hào)和阿里根證書(shū)的序列號(hào)
//獲得方法 是 上面的 readSnInfo()
request.putOtherTextParam("app_cert_sn", "xxxxxxxx");
request.putOtherTextParam("alipay_root_cert_sn", "xxxxxxxxxxxxx");
AlipayFundTransUniTransferResponse response = alipayClient.execute(request);
if (response.isSuccess()) {
System.out.println("調(diào)用成功");
} else {
System.out.println("調(diào)用失敗");
}
}
}