亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

前言

最近在工作中需要使用支付寶App支付,在初次使用過程中也不可避免的出現(xiàn)了一些問題,那么本次隨筆主要是概述支付寶app支付服務(wù)端的整個實現(xiàn)過程以及就服務(wù)端出現(xiàn)的一些問題做一些總結(jié)。

1.準備工作

1.1 入駐螞蟻金服開放平臺

https://open.alipay.com/platform/home.htm

1.2 創(chuàng)建應(yīng)用

首先需要創(chuàng)建一個應(yīng)用

支付寶app支付服務(wù)端的實現(xiàn)-Java版
支付寶app支付服務(wù)端的實現(xiàn)-Java版
支付寶app支付服務(wù)端的實現(xiàn)-Java版

然后需要設(shè)置應(yīng)用公鑰。

支付寶app支付服務(wù)端的實現(xiàn)-Java版

下載支付寶密鑰生成器。生成成功之后會有商戶應(yīng)用公鑰和私鑰,將公鑰復制到這里, 私鑰請妥善保存。下載地址:https://docs.open.alipay.com/291/106097/。保存設(shè)置之后會顯示支付寶公鑰,請妥善保存。

支付寶app支付服務(wù)端的實現(xiàn)-Java版

最后提交審核,等待。

注意:如果應(yīng)用審核通過上線之后,支付寶公鑰忘記后可通過進入應(yīng)用詳情頁,按如下圖所示查看支付寶公鑰。

支付寶app支付服務(wù)端的實現(xiàn)-Java版

2.Maven依賴

首先需要下載SDK,https://docs.open.alipay.com/54/104509。

完成之后,需要切換命令行,進入SDK所在目錄,執(zhí)行如下命令。如果命令無法執(zhí)行,請百度如何配置maven環(huán)境變量,配置好之后再執(zhí)行。

 mvn install:install-file -DgroupId=com.alipay.sdk -DartifactId=alipay-sdk-JAVA -Dversion=3.1.0 -Dpackaging=jar -Dfile=SDK文件名.jar

groupId:可以自己定義,pom文件依賴依據(jù)與此

artifactId:可以自己定義,pom文件依賴依據(jù)與此

version:可以自己定義,pom文件依賴依據(jù)與此

packaging:打包方式(jar)

file:文件的路徑的路徑

在pom.xml中引入依賴,如下。

<!-- 支付寶支付相關(guān)start -->

<dependency>

<groupId>com.alipay.sdk</groupId>

<artifactId>alipay-sdk-java</artifactId>

<version>3.1.0</version>

</dependency>

<!-- 支付寶支付相關(guān)end -->

3.配置文件中配置支付寶相關(guān)參數(shù)

#支付寶支付相關(guān)配置

#支付寶分配給開發(fā)者的應(yīng)用Id

aliPayAppId=XXX

#賣家支付寶用戶號(對應(yīng)異步通知返回參數(shù)seller_id)(可以不配置,只是異步通知時為了進一步校驗而配置)

aliPaySellerId=XXX

#賣家支付寶賬號(對應(yīng)異步通知返回參數(shù)seller_email)(可以不配置,只是異步通知時為了進一步校驗而配置)

alipayAccount=XXX

#商戶應(yīng)用公鑰

rsaPublicKey=XXX

#商戶應(yīng)用私鑰(注意,如果是Java語言,需要使用pkcs8格式的私鑰,避免出現(xiàn)不可預知的錯誤)

rsaPrivatKey=XXX

#支付寶公鑰

rsaAlipayPublicKey=XXX

#加密方式

signType=XXX

#僅支持JSON

alipayFormat=json

#請求使用的編碼格式,如utf-8,gbk,gb2312等

alipayCharset=utf-8

4.生成Android/ target=_blank class=infotextkey>安卓端需要的orderString信息的接口方法

/**

*app支付

*

*@author lp

*@date 2019/1/4 16:32

*/

@ApiOperation("app支付")

@RequestMapping(value = "alipay", method = RequestMethod.POST)

public String alipay(@RequestBody CombinedPaymentDto dto, HttpServletResponse response, HttpServletRequest request) {

response.setHeader("Access-Control-Allow-Origin", "*");

// 獲取項目中實際的訂單的信息

// 此處是相關(guān)業(yè)務(wù)代碼

// 獲取配置文件中支付寶相關(guān)信息(可以使用自己的方式獲取)

String aliPayGateway = PropertiesUtils.getInstace("config/webService.properties").getProperty("aliPayGateway");

String aliPayAppId = PropertiesUtils.getInstace("config/webService.properties").getProperty("aliPayAppId");

String rsaPublicKey = PropertiesUtils.getInstace("config/webService.properties").getProperty("rsaPublicKey");

String rsaPrivatKey = PropertiesUtils.getInstace("config/webService.properties").getProperty("rsaPrivatKey");

String rsaAlipayPublicKey = PropertiesUtils.getInstace("config/webService.properties").getProperty("rsaAlipayPublicKey");

String signType = PropertiesUtils.getInstace("config/webService.properties").getProperty("signType");

String alipayFormat = PropertiesUtils.getInstace("config/webService.properties").getProperty("alipayFormat");

String alipayCharset = PropertiesUtils.getInstace("config/webService.properties").getProperty("alipayCharset");

// 開始使用支付寶SDK中提供的API

AlipayClient alipayClient = new DefaultAlipayClient(aliPayGateway, aliPayAppId, rsaPrivatKey, alipayFormat, alipayCharset, rsaAlipayPublicKey, signType);

// 注意:不同接口這里的請求對象是不同的,這個可以查看螞蟻金服開放平臺的API文檔查看

AlipayTradeAppPayRequest alipayRequest = new AlipayTradeAppPayRequest();

AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();

model.setBody("XXX");

model.setSubject("XXX");

// 唯一訂單號 根據(jù)項目中實際需要獲取相應(yīng)的

model.setOutTradeNo("");

// 支付超時時間(根據(jù)項目需要填寫)

model.setTimeoutExpress("30m");

// 支付金額(項目中實際訂單的需要支付的金額,金額的獲取與操作請放在服務(wù)端完成,相對安全)

model.setTotalAmount("");

model.setProductCode("QUICK_MSECURITY_PAY");

alipayRequest.setBizModel(model);

// 支付成功后支付寶異步通知的接收地址url

alipayRequest.setNotifyUrl("XXX/getAlipayNotifyInfo");

// 注意:每個請求的相應(yīng)對象不同,與請求對象是對應(yīng)。

AlipayTradeAppPayResponse alipayResponse = null;

try {

alipayResponse = alipayClient.sdkExecute(alipayRequest);

} catch (AlipayApiException e) {

e.printStackTrace();

}

// 返回支付相關(guān)信息(此處可以直接將getBody中的內(nèi)容直接返回,無需再做一些其他操作)

return alipayResponse.getBody();

}

5.支付成功后服務(wù)端接收支付寶發(fā)來的異步通知的接口方法

/**

*接收支付寶異步通知消息

*

*@author lp

*@date 2019/1/4 17:19

*/

@ApiOperation("接收支付寶異步通知消息")

@RequestMapping(value = "getAlipayNotifyInfo", method = RequestMethod.POST)

public String getAlipayNotifyInfoOfCombinedPayment(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {

response.setHeader("Access-Control-Allow-Origin", "*");

// 解決POST請求中文亂碼問題(推薦使用此種方式解決中文亂碼,因為是支付寶發(fā)送異步通知使用的是POST請求)

request.setCharacterEncoding("UTF-8");

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

Map<String,String> params = new HashMap<>();

Map<String,String[]> requestParams = request.getParameterMap();

for (Iterator<String> 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] + ",";

}

 

// 官方demo中使用如下方式解決中文亂碼,在此本人不推薦使用,可能會出現(xiàn)中文亂碼解決無效的問題。

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

 

params.put(name, valueStr);

}

// 支付寶公鑰(請注意,不是商戶公鑰)

String rsaAlipayPublicKey = PropertiesUtils.getInstace("config/webService.properties").getProperty("rsaAlipayPublicKey");

String signType = PropertiesUtils.getInstace("config/webService.properties").getProperty("signType");

String alipayCharset = PropertiesUtils.getInstace("config/webService.properties").getProperty("alipayCharset");

boolean signVerified = false;

try {

//調(diào)用SDK驗證簽名

signVerified = AlipaySignature.rsaCheckV1(params, rsaAlipayPublicKey, alipayCharset, signType);

if(signVerified) {

// 驗證通知后執(zhí)行自己項目需要的業(yè)務(wù)操作

// 一般需要判斷支付狀態(tài)是否為TRADE_SUCCESS

// 更嚴謹一些還可以判斷 1.appid 2.sellerId 3.out_trade_no 4.total_amount 等是否正確,正確之后再進行相關(guān)業(yè)務(wù)操作。

 

// 成功要返回success,不然支付寶會不斷發(fā)送通知。

return "success";

}

// 驗簽失敗 筆者在這里是輸出log,可以根據(jù)需要做一些其他操作

 

// 失敗要返回fail,不然支付寶會不斷發(fā)送通知。

return "fail";

} catch (AlipayApiException e) {

e.printStackTrace();

// 驗簽異常 筆者在這里是輸出log,可以根據(jù)需要做一些其他操作

return "fail";

}

}

分享到:
標簽:支付寶
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定