日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 支付宝 退款_Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝支付)

發布時間:2023/12/4 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 支付宝 退款_Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝支付) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近一直在接觸第三方,剛接入完支付寶的API做一下總結,個人能力薄弱有不對的地方望指教.? 做的是一個小型電商項目,所以會接入第三方的支付和登入功能, 第一次接入第三方擼了很多官方文檔.

然后創建應用選擇需要接入的功能,有些應用是需要簽約的簽約就好了審核蠻快的.

以上應用申請,功能申請的一些操作我就不多做解釋了網上很多例子,

Java支付寶支付

這里有APP支付和手機網站支付, APP支付是針對Android和IOS的案例,? 那么我做的是手機網站支付針對Java后臺的案例.

我直接貼我的代碼:

/**

*

* 說明:支付寶支付 (我只填了部分參數,如果有更多參數需求的 可以直接:https://docs.open.alipay.com/203/107090/ )

* @param orderNumber 商戶網站唯一訂單號

* @param orderMoney 訂單金額

* @param orderSubject 商品的標題,關鍵字

* @param notifyUrl 異步回調地址(后臺) 獲取訂單信息

* @param returnUrl 同步回調地址(APP) 處理業務及渲染頁面

* @author ArLen

* @time:2018年12月11日 下午2:14:57

*/

@Override

public void payment(String orderNumber,

String orderMoney,

String orderSubject,

String notifyUrl,

String returnUrl) {

//填寫自己創建的app的對應參數

private static AlipayClient alipayClient = new DefaultAlipayClient("支付寶網關", "appid", "私鑰", "json", "utf-8", "公鑰","RSA2");

AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();

// 封裝請求支付信息

AlipayTradeWapPayModel model=new AlipayTradeWapPayModel();

model.setOutTradeNo(orderNumber);

model.setTotalAmount(orderMoney);

model.setSubject(orderSubject);

model.setProductCode("QUICK_WAP_WAY");

alipayRequest.setBizModel(model);

//異步回調地址(后臺)

alipayRequest.setNotifyUrl(notifyUrl);

// 同步回調地址(APP)

alipayRequest.setReturnUrl(returnUrl);

try {

//調用SDK生成表單

String form = alipayClient.pageExecute(alipayRequest).getBody();

//打印, 可以直接response到頁面上

System.out.println(form);

} catch (AlipayApiException e) {

e.printStackTrace();

}

}

支付成功后支付寶會自動請求你寫的? notifyUrl (異步通知, 接收支付寶異步通知,從而獲取此訂單的狀態) 和?returnUrl? (支付完成后,支付寶會發送同步請求進行數據渲染,? 這里我是用ModelAndView 渲染的數據)

notifyUrl異步通知代碼

/**

*

* 說明:對于手機網站支付產生的交易,支付寶會根據原始支付API中傳入的異步通知地址notify_url,通過POST請求的形式將支付結果作為參數通知到商戶系統。

* @param request

* @return

* @author Arlen

* @time:2018年12月3日 下午4:51:35

*/

@RequestMapping("notifyUrl")

@ResponseBody

public String notify(HttpServletRequest request){

int im=0;

im++;

//測試請求次數

System.out.println("次數:"+im);

//獲取支付寶POST過來反饋信息

Map params = new HashMap();

Map requestParams = request.getParameterMap();

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] + ",";

}

//亂碼解決,這段代碼在出現亂碼時使用。如果mysign和sign不相等也可以使用這段代碼轉化

//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");

params.put(name, valueStr);

}

//獲取支付寶的通知返回參數,可參考技術文檔中頁面跳轉同步通知參數列表(以下僅供參考)//

//商戶訂單號

String out_trade_no = request.getParameter("out_trade_no");

//支付寶交易號

String trade_no = request.getParameter("trade_no");

//交易狀態

String trade_status = request.getParameter("trade_status");

System.out.println(trade_status);

try {

boolean verify_result = AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, "utf-8", "RSA2");

if(verify_result){

//驗證成功

//請在這里加上商戶的業務邏輯程序代碼

System.out.println("returnUrl_params:驗證成功");

//——請根據您的業務邏輯來編寫程序(以下代碼僅作參考)——

boolean flg = false;

if(trade_status.equals("TRADE_FINISHED")){

System.out.println("returnUrl_params:交易結束");

//交易結束,不可退款

//注意:

//退款日期超過可退款期限后(如三個月可退款),支付寶系統發送該交易狀態通知

} else if (trade_status.equals("TRADE_SUCCESS")){

//交易支付成功

//注意:

//付款完成后,支付寶系統發送該交易狀態通知

//根據訂單號將訂單狀態和支付寶記錄表中狀態都改為已支付

System.out.println("returnUrl_params:交易支付成功");

flg = true;

}

//——請根據您的業務邏輯來編寫程序(以上代碼僅作參考)——

if(flg){

return "success";

}else{

return "fail";

}

}else{//驗證失敗

//out.print("fail");

return "fail";

}

} catch (AlipayApiException e) {

e.printStackTrace();

return "500";

}

}

returnUrl 同步通知代碼

我在這邊處理了業務邏輯,還在測試階段, 我覺得有些欠缺.

@RequestMapping("/returnUrl")

public ModelAndView result( HttpServletRequest request) {

System.out.println("進來");

//用ModelAndView 進行數據渲染

ModelAndView mv = new ModelAndView("alipay/return_url");

//獲取支付寶GET過來反饋信息

Map params = new HashMap();

Map requestParams = request.getParameterMap();

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] + ",";

}

//亂碼解決,這段代碼在出現亂碼時使用。如果mysign和sign不相等也可以使用這段代碼轉化

//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");

params.put(name, valueStr);

}

//交易訂單編號

String out_trade_no = request.getParameter("out_trade_no");

//交易金額

String total_amount = request.getParameter("total_amount");

//支付寶交易賬號

//String trade_no = request.getParameter("trade_no");

//訂單創建時間

String timestamp = request.getParameter("timestamp");

mv.addObject("out_trade_no", out_trade_no);

mv.addObject("total_amount", total_amount);

mv.addObject("timestamp", timestamp);

//打印所有響應數據

System.out.println("returnUrl_params:"+params);

try {

boolean verify_result = AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, "utf-8", "RSA2");

if(verify_result){

//驗證成功 這里寫的是假代碼

//系統處理根據支付寶回調更改訂單狀態或者其他關聯表的數據 (走業務流程, 根據訂單編號獲取訂單數據

//Order order =orderService.queryOrderByNumber(out_trade_no);

/* if(order !=null){

//order不為null

mv.addObject("verify_result", verify_result);

mv.addObject("msg", "商戶訂單號不存在");

} */

return mv;

}else{

//驗證失敗 跳失敗頁面

System.out.println("驗證失敗");

return null;

}

} catch (AlipayApiException e) {

e.printStackTrace();

//出現異常 跳失敗頁面

return null;

}

}

今天就先寫到 支付寶支付,明天再寫支付寶退款及其他操作.

總結

以上是生活随笔為你收集整理的java 支付宝 退款_Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝支付)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。