尚籌網(wǎng)2-6.接入支付

第五章 接入支付

1.螞蟻金服文檔地址

文檔入口:https://docs.open.alipay.com/270

沙箱文檔入口:https://docs.open.alipay.com/200/105311

2.支付流程

3.內(nèi)網(wǎng)穿透

①目的

讓本地運(yùn)行的項目可以通過外網(wǎng)訪問镶奉。

②工作機(jī)制

③NATAPP內(nèi)網(wǎng)穿透服務(wù)使用

#authtoken每個人不一樣,這個文件僅供參考
#將本文件放置于natapp同級目錄 程序?qū)⒆x取 [default] 段
#在命令行參數(shù)模式如 natapp -authtoken=xxx 等相同參數(shù)將會覆蓋掉此配置
#命令行參數(shù) -config= 可以指定任意config.ini文件
[default]
authtoken=79a1980a333f8a5f      #對應(yīng)一條隧道的authtoken
clienttoken=                    #對應(yīng)客戶端的clienttoken,將會忽略authtoken,若無請留空,
log=none                        #log 日志文件,可指定本地文件, none=不做記錄,stdout=直接屏幕輸出 ,默認(rèn)為none
loglevel=ERROR                  #日志等級 DEBUG, INFO, WARNING, ERROR 默認(rèn)為 DEBUG
http_proxy=                     #代理設(shè)置 如 http://10.123.10.10:3128 非代理上網(wǎng)用戶請務(wù)必留空

啟動natapp.exe,如果上面操作成功,會看到下面效果:

④測試效果

[1]啟動本地應(yīng)用

本地應(yīng)用監(jiān)聽的端口號需要和隧道一致,比如都是8080

[2]通過隧道暴露到外網(wǎng)的域名訪問本地應(yīng)用

例如:http://aatczu.natappfree.cc/apple/to/thymeleaf/page

4.密鑰相關(guān)的背景知識

①加密方式介紹

[1]對稱加密

明文:親愛的账阻,今晚8點,老地方見。

加密步驟1[轉(zhuǎn)換為拼音]:qinaidedouhaojinwanbadiandouhaolaodifangjian

加密步驟2[將字母轉(zhuǎn)換為序號]:13261205041101...220907

加密步驟3[將序號+5]:18311710091609..271413

密文:18311710091609..271413

解密步驟1[將序號-5]:13261205041101...220907

解密步驟2[將序號還原為字母]:qinaidedouhaojinwanbadiandouhaolaodifangjian

解密步驟3[將拼音還原為明文]:親愛的姑食,今晚8點,老地方見茅坛。

問題:一旦加密方式被敵人知道音半,敵人就會將密文反推出明文。

[2]非對稱加密

所謂非對稱加密贡蓖,就是說加密和解密分別使用不同鑰匙曹鸠。私鑰加密就必須用公鑰解密,公鑰加密就必須使用私鑰解密斥铺。

②加簽過程

③驗簽過程

5.官方Demo使用

①Demo工程下載地址

https://docs.open.alipay.com/270/106291/

②沙箱環(huán)境地址

https://openhome.alipay.com/platform/appDaily.htm

訪問這個地址查看相關(guān)參數(shù)

③生成密鑰文檔地址

https://docs.open.alipay.com/291/105971

下載RSA簽名驗簽工具windows_V1.4工具

運(yùn)行RSA簽名驗簽工具.bat文件

點擊生成密鑰

③AlipayConfig類的設(shè)置

// 應(yīng)用ID,您的APPID彻桃,收款賬號既是您的APPID對應(yīng)支付寶賬號
public static String app_id = "2016101700711393";

// 商戶私鑰,您的PKCS8格式RSA2私鑰
public static String merchant_private_key = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCZW5QIcTSb5OlkZrxUYdOLMmMlPD+qiVC7gp7tdTGi6nTEwhy/MtIUBStOQ3jntqpY2W00Di6KhZiT9L4z1rf2j7lUk53nRaFGX2yLS6cdrykdMLAXqXvAR6U/oWLw2OrRbHltdGVCgW1hrTKI480CoFL5ywqL9tTXlOlR1ewQjpCl7EeMcSL3aB9dTVmRX5Yc5qDdgcUDtMwNZ48eOJB+u5u6LGz+XWzconeS3Rxp9Dt/+GfxG4+EgUAAiqpDVh8Fb8QYcFaBlQ0DNwkwNfng5K0hbD/Y/d4c9e04khyKtTLbuHhkM1mogZtu5vrCt4RVgXa3fHqhfS9luUUlCkVPAgMBAAECggEBAJes3YJkBLZS9wrYGVgT0RgQ48JGDmnqmbB7BhixGkCZRpf7rFbmOqSWYDhtvzzdiymJEdq0VA+pBjj/jMbUjOoNSC2AOmIsmc9yPXafgk93mGBIcUFV3RFVSvjd829l+wjaElbREf1u6PH8TMjbFT6NtsNbr7iyjdwSaZkIzQuphBa0mtd3bIJf0SAtS6CK7HQujvxaYXLHY3hmNCUwb0rsNjuOLEsw6HAKnVgTh28c3JkXIwXdWsB5k4bPr/fwRxkE8F2ritbWRR3GhzfTgUebTPwpdYOqssy4r0Sla1WCdro5lFJ4kwK76i6esN7maN7L3+/RJ9wT/kjpqH8XToECgYEA9bUy6dAcwe3+Tjg9e7clzdopNQJGdbpFhVxruy/194WXBijezXUz+im+FnrVvjjubWnn4dEOmCH3Vv/AY6YQdsxr9MGv0mCspqRih0UFBgTn9Lmb22ZxJP9dQ3PlmspNUaxD4+fTshqcbBqQRlCkmy7s1t3Ga1zjaLUhFrtsn68CgYEAn8gUrkw1puGBkD8MVCAbOY9nbYDwtD1qu7Ne2RtilDBd91nJgyg0T4lSvTvCth7+8yYPp5LcmRxMlP7JcX/tGtMkDF9SpXgJqbWmXYK5OvhRmeC7FQCa7n/m5TIEfox+fFn1e3go8J2ABrHWECezCHk5rAYpo8HVKOEUOOZHfGECgYEAzfDL9bFbCSiDJ+h3kAQYCYu7UhTQHci8kGTAXyp5zLcJuD31UNvVbu4hxxG5qTBqlwZXNqxUwSpm92JxTJRZ5Fi+e20EAx7IVvwdISe2aC8gg7w2aBRa7Rmkf+7aGX1KhRQP6yvaAcPQK8Ov/V+GOBOCqy1DK6W1bYOzciwxhT0CgYAFvTgQ8qfSsLLorXsR4n1X2fDLHCCJONOGnnC/t54Y2IvngJAeZ+lJGhOgvG7H/+EEds+FI19NGJkfmO8/Zmrr1b2rvBjJ3L/sGpw5K6LfnV/A+TN/E6B9BJcUkHFc4ksAyHJq1uwRiHa6xtR7jBGAMmqB5U7FlQbFCyCg0pSqwQKBgEBEGy8r/RxBxX7Q/61arjP3/Gc/grXBuZPuxXD9GCPb5KDnvbYRUn9Hlew9gcIgu4GGA0OMiZPMCfFcDyuyKIgiZvqCzVpFGlcoWD+Q9wVlEDGTVH65iSWtaghWM7KH0y0RZ61dHUbiWIlKY4Q2NPkEZjE3iUphGszda5dr7feR";

// [正式環(huán)境]支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應(yīng)APPID下的支付寶公鑰晾蜘。
// [沙箱環(huán)境]支付寶公鑰,查看地址:https://openhome.alipay.com/platform/appDaily.htm 信息配置->必看部分->RSA2(SHA256)密鑰(推薦)->查看支付寶公鑰
public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl9LZ4sPSJeZy3wnO9IetyU1QP9u589LfWls6yHEX59oLSonYcZAK34sNWVuYMDeU/wBjENE5QXAT6IXxC/q2FiomNOnICN2mN/HoXQpfkkd801heDqPJ0NeTOmD+OPb+s/aLTOtxWpVDMfaDp529YJ5b8oxGkEFU3X/FE3ZzDFLj0As+tkcJQfZKuNnKh3jMzBlgpNQqcb2agCB2fDSVSKiX7EGpk/4JK53Igosu8w9MOYD8WDuqChVb8vnzYSHN3R0LDcoU8eVDEv/Hu9anGRzskvYkEgLm8ZXHPrkl2O3H+qnvFiDKLceqS7DYUOXVDJcMoMUxEGtvudR67fwzIwIDAQAB";

// 服務(wù)器異步通知頁面路徑  需http://格式的完整路徑邻眷,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問
// public static String notify_url = "http://工程公網(wǎng)訪問地址/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";

// 使用內(nèi)網(wǎng)穿透提供的對外暴露域名
public static String notify_url = "http://qckkb7.natappfree.cc/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";

// 頁面跳轉(zhuǎn)同步通知頁面路徑 需http://格式的完整路徑剔交,不能加?id=123這類自定義參數(shù)肆饶,必須外網(wǎng)可以正常訪問
// public static String return_url = "http://工程公網(wǎng)訪問地址/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";

// 使用內(nèi)網(wǎng)穿透提供的對外暴露域名
public static String return_url = "http://qckkb7.natappfree.cc/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";

// 簽名方式
public static String sign_type = "RSA2";

// 字符編碼格式
public static String charset = "utf-8";

// [正式環(huán)境]支付寶網(wǎng)關(guān)
// public static String gatewayUrl = "https://openapi.alipay.com/gateway.do";
// [沙箱環(huán)境]支付寶網(wǎng)關(guān)
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";

④在沙箱環(huán)境中設(shè)置應(yīng)用公鑰

操作位置:信息配置->必看部分->RSA2(SHA256)密鑰(推薦)->查看應(yīng)用公鑰->修改

⑤運(yùn)行工程

index.jsp→run as→run on sever

6.支付功能移植到項目

①加入支付功能相關(guān)依賴

參考文檔:https://docs.open.alipay.com/54/103419

所在工程:distribution-crowd-7-webui

<dependency>
  <groupId>com.alipay.sdk</groupId>
  <artifactId>alipay-sdk-java</artifactId>
  <version>3.3.49.ALL</version>
</dependency>

②加入AlipayConfig

所在工程:distribution-crowd-7-webui

全類名:com.rgh.crowd.config.AlipayConfig

使用官方Demo工程中的AlipayConfig類。內(nèi)網(wǎng)穿透地址需要根據(jù)當(dāng)前運(yùn)行時的實際情況調(diào)整岖常。notify_url和return_url需要編寫對應(yīng)的handler方法處理驯镊。

public class AlipayConfig {
    
//↓↓↓↓↓↓↓↓↓↓請在這里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    // 應(yīng)用ID,您的APPID,收款賬號既是您的APPID對應(yīng)支付寶賬號
    public static String app_id = "2016101700711393";
    
    // 商戶私鑰竭鞍,您的PKCS8格式RSA2私鑰
    public static String merchant_private_key = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCZW5QIcTSb5OlkZrxUYdOLMmMlPD+qiVC7gp7tdTGi6nTEwhy/MtIUBStOQ3jntqpY2W00Di6KhZiT9L4z1rf2j7lUk53nRaFGX2yLS6cdrykdMLAXqXvAR6U/oWLw2OrRbHltdGVCgW1hrTKI480CoFL5ywqL9tTXlOlR1ewQjpCl7EeMcSL3aB9dTVmRX5Yc5qDdgcUDtMwNZ48eOJB+u5u6LGz+XWzconeS3Rxp9Dt/+GfxG4+EgUAAiqpDVh8Fb8QYcFaBlQ0DNwkwNfng5K0hbD/Y/d4c9e04khyKtTLbuHhkM1mogZtu5vrCt4RVgXa3fHqhfS9luUUlCkVPAgMBAAECggEBAJes3YJkBLZS9wrYGVgT0RgQ48JGDmnqmbB7BhixGkCZRpf7rFbmOqSWYDhtvzzdiymJEdq0VA+pBjj/jMbUjOoNSC2AOmIsmc9yPXafgk93mGBIcUFV3RFVSvjd829l+wjaElbREf1u6PH8TMjbFT6NtsNbr7iyjdwSaZkIzQuphBa0mtd3bIJf0SAtS6CK7HQujvxaYXLHY3hmNCUwb0rsNjuOLEsw6HAKnVgTh28c3JkXIwXdWsB5k4bPr/fwRxkE8F2ritbWRR3GhzfTgUebTPwpdYOqssy4r0Sla1WCdro5lFJ4kwK76i6esN7maN7L3+/RJ9wT/kjpqH8XToECgYEA9bUy6dAcwe3+Tjg9e7clzdopNQJGdbpFhVxruy/194WXBijezXUz+im+FnrVvjjubWnn4dEOmCH3Vv/AY6YQdsxr9MGv0mCspqRih0UFBgTn9Lmb22ZxJP9dQ3PlmspNUaxD4+fTshqcbBqQRlCkmy7s1t3Ga1zjaLUhFrtsn68CgYEAn8gUrkw1puGBkD8MVCAbOY9nbYDwtD1qu7Ne2RtilDBd91nJgyg0T4lSvTvCth7+8yYPp5LcmRxMlP7JcX/tGtMkDF9SpXgJqbWmXYK5OvhRmeC7FQCa7n/m5TIEfox+fFn1e3go8J2ABrHWECezCHk5rAYpo8HVKOEUOOZHfGECgYEAzfDL9bFbCSiDJ+h3kAQYCYu7UhTQHci8kGTAXyp5zLcJuD31UNvVbu4hxxG5qTBqlwZXNqxUwSpm92JxTJRZ5Fi+e20EAx7IVvwdISe2aC8gg7w2aBRa7Rmkf+7aGX1KhRQP6yvaAcPQK8Ov/V+GOBOCqy1DK6W1bYOzciwxhT0CgYAFvTgQ8qfSsLLorXsR4n1X2fDLHCCJONOGnnC/t54Y2IvngJAeZ+lJGhOgvG7H/+EEds+FI19NGJkfmO8/Zmrr1b2rvBjJ3L/sGpw5K6LfnV/A+TN/E6B9BJcUkHFc4ksAyHJq1uwRiHa6xtR7jBGAMmqB5U7FlQbFCyCg0pSqwQKBgEBEGy8r/RxBxX7Q/61arjP3/Gc/grXBuZPuxXD9GCPb5KDnvbYRUn9Hlew9gcIgu4GGA0OMiZPMCfFcDyuyKIgiZvqCzVpFGlcoWD+Q9wVlEDGTVH65iSWtaghWM7KH0y0RZ61dHUbiWIlKY4Q2NPkEZjE3iUphGszda5dr7feR";
    
    // 支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應(yīng)APPID下的支付寶公鑰板惑。
    // 沙箱公鑰地址:https://openhome.alipay.com/platform/appDaily.htm
    public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl9LZ4sPSJeZy3wnO9IetyU1QP9u589LfWls6yHEX59oLSonYcZAK34sNWVuYMDeU/wBjENE5QXAT6IXxC/q2FiomNOnICN2mN/HoXQpfkkd801heDqPJ0NeTOmD+OPb+s/aLTOtxWpVDMfaDp529YJ5b8oxGkEFU3X/FE3ZzDFLj0As+tkcJQfZKuNnKh3jMzBlgpNQqcb2agCB2fDSVSKiX7EGpk/4JK53Igosu8w9MOYD8WDuqChVb8vnzYSHN3R0LDcoU8eVDEv/Hu9anGRzskvYkEgLm8ZXHPrkl2O3H+qnvFiDKLceqS7DYUOXVDJcMoMUxEGtvudR67fwzIwIDAQAB";

    // 服務(wù)器異步通知頁面路徑  需http://格式的完整路徑,不能加?id=123這類自定義參數(shù)偎快,必須外網(wǎng)可以正常訪問
    public static String notify_url = "http://ekmmng.natappfree.cc/pay/notify.html";

    // 頁面跳轉(zhuǎn)同步通知頁面路徑 需http://格式的完整路徑冯乘,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問
    public static String return_url = "http://ekmmng.natappfree.cc/pay/return.html";

    // 簽名方式
    public static String sign_type = "RSA2";
    
    // 字符編碼格式
    public static String charset = "utf-8";
    
    // 支付寶網(wǎng)關(guān)
    public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";

}

③創(chuàng)建PayController

所在工程:distribution-crowd-7-webui

全類名:com.rgh.crowd.controller.PayController

@Controller
public class PayController {

}

④處理付款請求的方法

所在工程:distribution-crowd-7-webui

所在類:com.rgh.crowd.controller.PayController

@ResponseBody
@RequestMapping("/pay/do/pay.html")
public String doPay(HttpServletRequest request) throws AlipayApiException, UnsupportedEncodingException {

    // 獲得初始化的AlipayClient
    AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id,
                                                        AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key,
                                                        AlipayConfig.sign_type);

    // 設(shè)置請求參數(shù)
    AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
    alipayRequest.setReturnUrl(AlipayConfig.return_url);
    alipayRequest.setNotifyUrl(AlipayConfig.notify_url);

    // 商戶訂單號晒夹,商戶網(wǎng)站訂單系統(tǒng)中唯一訂單號裆馒,必填
    String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"), "UTF-8");
    // 付款金額姊氓,必填
    String total_amount = new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"), "UTF-8");
    // 訂單名稱,必填
    String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"), "UTF-8");
    // 商品描述领追,可空
    String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"), "UTF-8");

    alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":\"" + total_amount
                                + "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\","
                                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

    // 若想給BizContent增加其他可選請求參數(shù)他膳,以增加自定義超時時間參數(shù)timeout_express來舉例說明
    // alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
    // + "\"total_amount\":\""+ total_amount +"\","
    // + "\"subject\":\""+ subject +"\","
    // + "\"body\":\""+ body +"\","
    // + "\"timeout_express\":\"10m\","
    // + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
    // 請求參數(shù)可查閱【電腦網(wǎng)站支付的API文檔-alipay.trade.page.pay-請求參數(shù)】章節(jié)

    // 請求
    String result = alipayClient.pageExecute(alipayRequest).getBody();

    // Demo中的處理方式是:out.println(result)
    // 我們使用這個result作為響應(yīng)體即可,也就是說當(dāng)前方法返回result绒窑,配合@ResponseBody注解讓result作為響應(yīng)體
    return result;

}

⑤return方法

@ResponseBody
@RequestMapping("/pay/return.html")
public String returnUrl(HttpServletRequest request) throws Exception {

    // 獲取支付寶GET過來反饋信息
    Map<String, String> params = new HashMap<String, String>();
    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] + ",";
        }
        // 亂碼解決棕孙,這段代碼在出現(xiàn)亂碼時使用
        valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
        params.put(name, valueStr);
    }

    boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset,
                                                      AlipayConfig.sign_type); // 調(diào)用SDK驗證簽名

    // ——請在這里編寫您的程序(以下代碼僅作參考)——
    if (signVerified) {
        // 商戶訂單號
        String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");

        // 支付寶交易號
        String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");

        // 付款金額
        String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"), "UTF-8");

        return "trade_no:" + trade_no + "<br/>out_trade_no:" + out_trade_no + "<br/>total_amount:" + total_amount;
    } else {
        return "驗簽失敗";
    }

}

⑥notify方法

@ResponseBody
@RequestMapping("/pay/notify.html")
public String notifyUrl(HttpServletRequest request) throws Exception {

    //獲取支付寶POST過來反饋信息
    Map<String,String> params = new HashMap<String,String>();
    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] + ",";
        }
        //亂碼解決,這段代碼在出現(xiàn)亂碼時使用
        valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
        params.put(name, valueStr);
    }

    boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type); //調(diào)用SDK驗證簽名

    //——請在這里編寫您的程序(以下代碼僅作參考)——

    /* 實際驗證過程建議商戶務(wù)必添加以下校驗:
        1些膨、需要驗證該通知數(shù)據(jù)中的out_trade_no是否為商戶系統(tǒng)中創(chuàng)建的訂單號蟀俊,
        2祥楣、判斷total_amount是否確實為該訂單的實際金額(即商戶訂單創(chuàng)建時的金額)诫尽,
        3、校驗通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據(jù)的對應(yīng)的操作方(有的時候微姊,一個商戶可能有多個seller_id/seller_email)
        4洼哎、驗證app_id是否為該商戶本身烫映。
        */
    if(signVerified) {//驗證成功
        //商戶訂單號
        // String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");

        //支付寶交易號
        // String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");

        //交易狀態(tài)
        String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");

        if(trade_status.equals("TRADE_FINISHED")){
            //判斷該筆訂單是否在商戶網(wǎng)站中已經(jīng)做過處理
            //如果沒有做過處理,根據(jù)訂單號(out_trade_no)在商戶網(wǎng)站的訂單系統(tǒng)中查到該筆訂單的詳細(xì)噩峦,并執(zhí)行商戶的業(yè)務(wù)程序
            //如果有做過處理锭沟,不執(zhí)行商戶的業(yè)務(wù)程序

            //注意:
            //退款日期超過可退款期限后(如三個月可退款),支付寶系統(tǒng)發(fā)送該交易狀態(tài)通知
        }else if (trade_status.equals("TRADE_SUCCESS")){
            //判斷該筆訂單是否在商戶網(wǎng)站中已經(jīng)做過處理
            //如果沒有做過處理识补,根據(jù)訂單號(out_trade_no)在商戶網(wǎng)站的訂單系統(tǒng)中查到該筆訂單的詳細(xì)族淮,并執(zhí)行商戶的業(yè)務(wù)程序
            //如果有做過處理,不執(zhí)行商戶的業(yè)務(wù)程序

            //注意:
            //付款完成后凭涂,支付寶系統(tǒng)發(fā)送該交易狀態(tài)通知
        }

        return "success";

    }else {//驗證失敗
        return "fail";

        //調(diào)試用祝辣,寫文本函數(shù)記錄程序運(yùn)行情況是否正常
        //String sWord = AlipaySignature.getSignCheckContentV1(params);
        //AlipayConfig.logResult(sWord);
    }

}

⑦將AliPayConfig中的屬性配置轉(zhuǎn)移到y(tǒng)ml文件

[1]@Value注解不能修飾靜態(tài)資源

加載類比IOC容器初始化要早,靜態(tài)資源初始化時IOC容器還沒有初始化好切油,@Value注解的值設(shè)置不進(jìn)去蝙斜。

[2]解決辦法

實現(xiàn)接口org.springframework.beans.factory.InitializingBean

@Configuration
public class AlipayConfig implements InitializingBean {
    
    @Value("${alipay.app_id}")
    private String appId;
    //……
    @Override
    public void afterPropertiesSet() throws Exception {
        app_id = this.appId;
        //……
    }

在yml配置文件中加入

ali.pay.app.id: "2016101700711393"
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市白翻,隨后出現(xiàn)的幾起案子乍炉,更是在濱河造成了極大的恐慌,老刑警劉巖滤馍,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異底循,居然都是意外死亡巢株,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門熙涤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阁苞,“玉大人困檩,你說我怎么就攤上這事∧遣郏” “怎么了悼沿?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長骚灸。 經(jīng)常有香客問我糟趾,道長,這世上最難降的妖魔是什么甚牲? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任义郑,我火速辦了婚禮,結(jié)果婚禮上丈钙,老公的妹妹穿的比我還像新娘非驮。我一直安慰自己,他們只是感情好雏赦,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布劫笙。 她就那樣靜靜地躺著,像睡著了一般星岗。 火紅的嫁衣襯著肌膚如雪填大。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天伍茄,我揣著相機(jī)與錄音栋盹,去河邊找鬼。 笑死敷矫,一個胖子當(dāng)著我的面吹牛例获,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播曹仗,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼榨汤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了怎茫?” 一聲冷哼從身側(cè)響起收壕,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎轨蛤,沒想到半個月后蜜宪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡祥山,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年圃验,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缝呕。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡澳窑,死狀恐怖斧散,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情摊聋,我是刑警寧澤鸡捐,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站麻裁,受9級特大地震影響箍镜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悲立,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一鹿寨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧薪夕,春花似錦脚草、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至姑隅,卻和暖如春写隶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背讲仰。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工慕趴, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鄙陡。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓冕房,卻偏偏與公主長得像,于是被迫代替她去往敵國和親趁矾。 傳聞我的和親對象是個殘疾皇子耙册,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容