支付寶PC端 網頁支付 相關研究
這個官方的文件例子還是靠譜的,可能不太好調例子
好的部落格還是很多的,不過我沒怎麼查,這個
https://docs.open.alipay.com/270/105899/
https://docs.open.alipay.com/58/103584
官方的
必須知道他需要什麼東西,看過官方的文件與例子才行
這個跟微信也有相似:
首先配置檔案
商戶號,支付寶號,私匙,公匙,簽名,閘道器,回撥
controller
@RequestMapping(value="/pagePay",produces="application/json;charset=UTF-8")
public String pagePay(ForAlipay record){
JSONObject json = new JSONObject();
String form = alipayService.pagePay(record);
json.put("data", form);
return json.toJSONString();
}
service實現類:
@Override
public String pagePay(ForAlipay record) {
//支付頁面介面對應的request
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
//在公共引數中設定回跳和通知地址
//return_url:買家支付成功後跳轉的頁面,僅當買家支付成功後跳轉一次
//notify_url:非同步通知,下單成功後,支付寶伺服器通知商戶服務,並把訂單的狀態通知給商戶,商戶根據返回的訂單狀態,修改網站訂單的狀態
alipayRequest.setReturnUrl(AlipayConfig.return_url);
alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
AlipayTradePagePayModel model = new AlipayTradePagePayModel();
//TbOrderForm order = tbOrderFormMapper.selectByPrimaryKey(record.getOut_trade_no());
model.setOutTradeNo(record.getOut_trade_no());
model.setTotalAmount(100+"");
model.setSubject(record.getSubject());
model.setBody(record.getBody());
model.setProductCode("FAST_INSTANT_TRADE_PAY");
//自填
model.setBody("a");
model.setSubject("aa");
alipayRequest.setBizModel(model);
String form="";
try {
form = alipayClient.pageExecute(alipayRequest).getBody();
} catch (AlipayApiException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return form;
},
注意他的引數有幾個不為空,不然報錯setSubjec,他返回的是一個html頁面,人家給畫好了
支付成功調回調函式:
他比較有意思,非同步通知,同步跳轉,
買家付款成功後,如果介面中指定有return_url ,買家付完款後會跳到 return_url所在的頁面,這個頁面可以展示給客戶看,這個頁面只有付款成功才會跳轉.
notify_url:伺服器後臺通知,這個頁面是程式後臺執行的(買家和賣家都看不到),買家付完款後,支付寶會呼叫notify_url這個頁面所在的頁面並把相應的引數傳遞到這個頁面,這個頁面根據支付寶傳遞過來的引數修改網站訂單的狀態,更新完訂單後需要在頁面上打印出一個success給支付寶,如果反饋給支付寶的不是success,支付寶會繼續呼叫這個頁面.
流程:買家付完款(trade_status=WAIT_SELLER_SEND_GOODS)--->支付寶通知notify_url---& gt;如果反饋給支付寶的是success(表示成功,這個狀態下不再反饋,如果不是繼續通知,一般第一次傳送和第二次傳送的時間間隔是3分鐘)
剩下的過程,賣家發貨,買家確認收貨,交易成功都是這個流程
通知service
@RequestMapping(value = "/notifyU",produces = "application/json;charset=utf-8")
public String notifyU(HttpServletRequest req){
String notify = "";
try {
notify = alipayService.notify(req);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return notify;
}
/**
*
* @Title: returnU
* @Description: 支付寶同步跳轉,支付成功後,獲取支付寶get過來的資訊,驗籤
* @author: chen
* @param: @param req
* @param: @return
* @return: String
* @throws
*/
@RequestMapping(value = "/returnU",produces = "application/json;charset=utf-8")
public String returnU(HttpServletRequest req){
JSONObject json = new JSONObject();
String returnU = "";
try {
returnU = alipayService.returnU(req);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
json.put("code", ResponseStatusCode.PAY_ERR);
json.put("msg", "支付失敗");
}
if("success".equals(returnU)){
json.put("code", ResponseStatusCode.SUCC);
}else{
json.put("code", ResponseStatusCode.PAY_ERR);
json.put("msg", "支付失敗");
}
return json.toJSONString();
}
/**
*
* @Title: wxNotify
* @Description: 微信支付通知
* @author: chen
* @param: @param req
* @param: @return
* @return: String
* @throws
*/
@RequestMapping(value = "/wxNotify",produces = "application/json;charset=utf-8")
public String wxNotify(HttpServletRequest req){
String notify = wXPayService.notify(req);
return notify;
}
具體的實現類,相信你可以搜到,太多了不記錄了