中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

接入支付寶支付接口(一):發起支付請求

發布時間:2020-07-09 13:28:10 來源:網絡 閱讀:10563 作者:heiyouling 欄目:開發技術

一、前言

在接入支付寶接口之前,需要在支付寶官網進行應用注冊和實名認證,地址不再貼出。

在此,貼出支付寶開放平臺文檔地址:https://docs.open.alipay.com/58/103585/

在這個地址中,詳細介紹了如何接入支付寶接口

二、發起請求

支付寶的簽名方式等不做詳細介紹,在開發文檔中有詳細說明,筆者建議:編碼格式請使用UTF-8。

接下來的介紹中,主要貼出代碼(代碼僅供參考)

在貼出代碼之前,首先大致了解一下如何發起支付請求:

第一步:組裝阿里參數

該步驟組裝的參數來自于商戶系統的支付信息,包括支付類型、商品名稱等信息。值得注意的是,支付寶要求傳入兩個url,分別是異步通知和同步通知,這兩個接口用于支付寶向商戶系統反饋支付結果,同步為GET請求,異步為POST請求,詳細用法將在下一篇做介紹。

第二步:過濾參數

該步驟作用是將上述組裝的參數,value為空的鍵值對去掉,同時去掉sign和sign_type參數。

第三步:生成簽名

該步驟對應代碼使用MD5加密方式

第四步:重新組裝

將生成的簽名加入盛放參數的map中

第五步:獲取html

獲取到的html是一個form表單,action為支付寶的網關:https://mapi.alipay.com/gateway.do?input_charset=編碼格式,表單內容為input標簽的集合,例如<input type="hidden",name="參數名稱",value="參數值" >,將該表單顯示在頁面上,會跳轉至支付寶網關,顯示支付寶掃碼頁面,待用戶掃碼后,發起支付請求完成

接下來貼出代碼:

該部分代碼為最上層代碼,獲取的html可返回給頁面直接使用

Map<String, String> sParaTemp = new HashMap<String, String>();
sParaTemp.put("service", AlipayConfig.serivce);//接口服務----即時到賬
sParaTemp.put("partner", AlipayConfig.partner);//支付寶PID
sParaTemp.put("_input_charset", AlipayConfig.input_charset);//統一編碼
sParaTemp.put("payment_type", payment_type);//支付類型
sParaTemp.put("notify_url", notify_url);//異步通知頁面
sParaTemp.put("return_url", return_url);//頁面跳轉同步通知頁面
sParaTemp.put("seller_email", seller_email);//賣家支付寶賬號
sParaTemp.put("out_trade_no", out_trade_no);//商品訂單編號
sParaTemp.put("subject", subject);//商品名稱
sParaTemp.put("total_fee", total_fee);//價格
sParaTemp.put("body", body);
sParaTemp.put("paymethod", AlipayConfig.paymethod);
sParaTemp.put("defaultbank", defaultBank);
sParaTemp.put("show_url", show_url);
sParaTemp.put("anti_phishing_key", anti_phishing_key);
sParaTemp.put("exter_invoke_ip", exter_invoke_ip);
String html= AlipaySubmit.buildRequest(sParaTemp,"post","確認");
public static String buildRequest(Map<String, String> sParaTemp, String strMethod, String strButtonName) {
    Map<String, String> sPara = buildRequestPara(sParaTemp);//第二步+第三步:過濾參數
    List<String> keys = new ArrayList(sPara.keySet());
    StringBuffer sbHtml = new StringBuffer();
    sbHtml.append("<form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"https://mapi.alipay.com/gateway.do?_input_charset=" + AlipayConfig.input_charset + "\" method=\"" + strMethod + "\">");
    for(int i = 0; i < keys.size(); ++i) {
        String name = (String)keys.get(i);
        String value = (String)sPara.get(name);
        sbHtml.append("<input type=\"hidden\" name=\"" + name + "\" value=\"" + value + "\"/>");
    }

    sbHtml.append("<input type=\"submit\" value=\"" + strButtonName + "\" style=\"display:none;\"></form>");
    sbHtml.append("<br><br>跳轉中,請稍候...");
    sbHtml.append("<script>document.forms['alipaysubmit'].submit();</script>");
    return sbHtml.toString();
}

buildRequestPara()用于過濾參數和生成簽名:

private static Map<String, String> buildRequestPara(Map<String, String> sParaTemp) {
    Map<String, String> sPara = AlipayCore.paraFilter(sParaTemp);
    String mysign = buildRequestMysign(sPara);
    sPara.put("sign", mysign);
    sPara.put("sign_type", AlipayConfig.sign_type);
    return sPara;
}

第二步:paraFilter()過濾掉value的鍵值對和sign、sign_type:

public static Map<String, String> paraFilter(Map<String, String> sArray) {
    Map<String, String> result = new HashMap();
    if (sArray != null && sArray.size() > 0) {
        Iterator var3 = sArray.keySet().iterator();
        while(var3.hasNext()) {
            String key = (String)var3.next();
            String value = (String)sArray.get(key);
            if (value != null && !value.equals("") && !key.equalsIgnoreCase("sign") && !key.equalsIgnoreCase("sign_type")) {
                result.put(key, value);
            }
        }
        return result;
    } else {
        return result;
    }
}

第三步:buildRequestMysign()生成簽名:

public static String buildRequestMysign(Map<String, String> sPara) {
    String prestr = AlipayCore.createLinkString(sPara);
    String mysign = "";
    if (AlipayConfig.sign_type.equals("MD5")) {
        mysign = MD5.sign(prestr, AlipayConfig.key, AlipayConfig.input_charset);
    }
    return mysign;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

清水县| 海南省| 平凉市| 东港市| 工布江达县| 栾川县| 凯里市| 包头市| 汨罗市| 崇州市| 玉田县| 永新县| 沁阳市| 永仁县| 巍山| 建平县| 开封县| 云梦县| 达孜县| 江达县| 左贡县| 荣昌县| 大埔县| 肥东县| 乌鲁木齐县| 津南区| 苍溪县| 郧西县| 沈阳市| 永登县| 邢台县| 阳春市| 神池县| 新安县| 庄浪县| 永吉县| 江津市| 大方县| 青龙| 滨海县| 常德市|