吐槽一下, 簡(jiǎn)書內(nèi)容沒有自帶目錄
, 且中間內(nèi)容區(qū)域太窄
了
集成
支付寶
- 開發(fā)者應(yīng)用配置
- Maven 依賴
<!-- 支付寶 -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.34.47.ALL</version>
</dependency>
- yml配置
alipay: # 支付寶配置
appid: 123
...
微信支付
微信登錄/分享社交類 和 微信支付是分開的
微信支付
所有示例都在 https://github.com/wechatpay-apiv3/wechatpay-java/blob/main/service/src/example, 請(qǐng)自由查看
SDK https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay6_0.shtml
- Maven 依賴
<!-- 微信 https://github.com/wechatpay-apiv3/wechatpay-java -->
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-java</artifactId>
<version>0.2.1</version>
</dependency>
- yml配置
wechatpay: # 微信支付配置
appid: 123
...
登錄
支付寶
目前廣泛應(yīng)用于支付寶用戶在合作商家端的快速登錄場(chǎng)景和支付寶開放業(yè)務(wù)的免登錄使用場(chǎng)景等。[1]
先獲取 token, 再獲取用戶信息
- alipay.system.oauth.token(換取授權(quán)訪問令牌) https://opendocs.alipay.com/open/02ailc?ref=api
- alipay.user.info.share(支付寶會(huì)員授權(quán)信息查詢接口) https://opendocs.alipay.com/open/02aild?ref=api
微信
移動(dòng)應(yīng)用微信登錄開發(fā)指南 https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Development_Guide.html
支付
支付寶
外部商戶APP喚起快捷SDK創(chuàng)建訂單并支付[2]
alipay.trade.app.pay(app支付接口2.0) https://opendocs.alipay.com/open/02e7gq?ref=api&scene=20
微信
商戶系統(tǒng)先調(diào)用該接口在微信支付服務(wù)后臺(tái)生成預(yù)支付交易單,返回正確的預(yù)支付交易會(huì)話標(biāo)識(shí)后再按Native浪慌、JSAPI东臀、APP等不同場(chǎng)景生成交易串調(diào)起支付追他。
APP下單API https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_1.shtml
轉(zhuǎn)賬
支付寶
轉(zhuǎn)賬到支付寶賬戶是為了滿足支付寶商家向其他支付寶賬戶進(jìn)行單筆轉(zhuǎn)賬的需求圆仔,針對(duì)具備開發(fā)能力的商家勒奇,提供通過 API 接口完成單筆轉(zhuǎn)賬的功能直秆。商家只需輸入另一個(gè)正確的支付寶賬號(hào)濒募,即可將資金從本企業(yè)支付寶賬戶轉(zhuǎn)賬至另一個(gè)支付寶賬戶。 該產(chǎn)品適用行業(yè)較廣圾结,可用于商家間的貨款結(jié)算瑰剃、轉(zhuǎn)賬匯款,商家給企業(yè)或個(gè)人發(fā)放傭金等筝野。[3]
支付寶提供的站內(nèi)轉(zhuǎn)賬功能晌姚,需要商家登錄支付寶網(wǎng)站進(jìn)行操作。部分擁有自身業(yè)務(wù)系統(tǒng)(如 CRM歇竟、ERP 等)的商家挥唠,希望支付寶提供轉(zhuǎn)賬接口,與自身業(yè)務(wù)系統(tǒng)直接對(duì)接實(shí)現(xiàn)轉(zhuǎn)賬功能焕议,而不是頻繁登錄支付寶網(wǎng)站轉(zhuǎn)賬宝磨。為解決上述問題,支付寶為具備開發(fā)能力的商家提供了轉(zhuǎn)賬到支付寶賬戶產(chǎn)品盅安,滿足了商家通過接口集成唤锉,由商家自身業(yè)務(wù)系統(tǒng)完成支付寶轉(zhuǎn)賬功能的需求。[3]
alipay.fund.trans.uni.transfer(單筆轉(zhuǎn)賬接口) https://opendocs.alipay.com/open/02byuo
public void transfer(String payeeIdentity, String payeeInfoIdentityType, String payeeName,
String outBizNo, String transAmount,
String orderTitle, String remark) throws AlipayApiException {
CertAlipayRequest alipayConfig = new CertAlipayRequest();
alipayConfig.setPrivateKey(privateKey);
alipayConfig.setServerUrl(serverUrl);
alipayConfig.setAppId(appId);
alipayConfig.setFormat(format);
alipayConfig.setCharset(charset);
alipayConfig.setSignType(signType);
alipayConfig.setCertPath(certPath);
alipayConfig.setAlipayPublicCertPath(alipayPublicCertPath);
alipayConfig.setRootCertPath(rootCertPath);
Participant payeeInfo = new Participant();
payeeInfo.setIdentity(payeeIdentity);
payeeInfo.setIdentityType(payeeInfoIdentityType);
payeeInfo.setName(payeeName);
AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
model.setPayeeInfo(payeeInfo);
model.setOutBizNo(outBizNo);
model.setTransAmount(transAmount);
model.setProductCode(productCode);
model.setBizScene(bizScene);
model.setOrderTitle(orderTitle);
model.setRemark(remark);
model.setBusinessParams(businessParams);
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
request.setBizModel(model);
AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
if (response.isSuccess()) {
System.out.println("調(diào)用成功");
String responseOutBizNo = response.getOutBizNo();
String responseOrderId = response.getOrderId();
String responsePayFundOrderId = response.getPayFundOrderId();
String responseTransDate = response.getTransDate();
} else {
System.out.println("調(diào)用失敗");
}
}
微信
商戶可以通過該接口同時(shí)向多個(gè)用戶微信零錢進(jìn)行轉(zhuǎn)賬操作宽堆。
發(fā)起商家轉(zhuǎn)賬API https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_1.shtml
異步通知
支付寶
異步通知說明 https://opendocs.alipay.com/open/204/105301
@ApiOperation("支付寶異步通知")
@PostMapping("/alipay_async")
public String alipay_async(HttpServletRequest request) {
Map requestParams = request.getParameterMap();
//獲取支付寶POST過來反饋信息腌紧,將異步通知中收到的待驗(yàn)證所有參數(shù)都存放到map中
Map<String, String> params = new HashMap<>();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
}
//亂碼解決茸习,這段代碼在出現(xiàn)亂碼時(shí)使用畜隶。
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
try {
//調(diào)用SDK驗(yàn)證簽名
//公鑰驗(yàn)簽示例代碼
boolean signVerified = AlipaySignature.rsaCheckV1(params, "ALIPAY_PUBLIC_KEY", "CHARSET", "sign_type");
//公鑰證書驗(yàn)簽示例代碼
//boolean flag = AlipaySignature.rsaCertCheckV1(params,alipayPublicCertPath,"UTF-8","RSA2");
if (signVerified) {
// TODO 驗(yàn)簽成功后
//按照支付結(jié)果異步通知中的描述,對(duì)支付結(jié)果中的業(yè)務(wù)內(nèi)容進(jìn)行1\2\3\4二次校驗(yàn)号胚,校驗(yàn)成功后在response中返回success
} else {
// TODO 驗(yàn)簽失敗則記錄異常日志籽慢,并在response中返回fail.
return "fail";
}
} catch (AlipayApiException e) {
//throw new RuntimeException(e);
return "fail";
}
return "success";
}
微信
微信支付通過支付通知接口將用戶支付成功消息通知給商戶
支付通知API https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_5.shtml