1. 程式人生 > >pc 端支付寶支付流程

pc 端支付寶支付流程

timestamp dbo 接口調用 div i++ hid jsp ids 分享

用戶在商戶網站上完成支付

一、商戶申請流程和業務場景

  • 即時到賬:網上交易時,買家的交易資金直接打入賣家支付寶賬戶,快速回籠交易資金。
  • 申請條件:
    1) 申請前必須擁有經過實名認證的支付寶賬戶;
    2) 企業或個體工商戶可申請;
    3) 需提供真實有效的營業執照,且支付寶賬戶名稱需與營業執照主體一致;
    4) 網站能正常訪問且頁面顯示完整,網站需要明確經營內容且有完整的商品信息;
    5) 網站必須通過ICP備案。如為個體工商戶,網站備案主體需要與支付寶賬戶主體名稱一致;
    6) 如為個體工商戶,則團購不開放,且古玩、珠寶等奢侈品、投資類行業無法申請本產品;
  • 使用場景:
    1. 買家選擇產品
      技術分享圖片
      技術分享圖片
    2. 買家選擇付款方式
      買家選擇手機掃一掃付款或 買家選擇在電腦端登錄賬戶付款
      技術分享圖片
    3. 買家選擇在電腦端登錄賬戶付款,並完成交易
      技術分享圖片
      技術分享圖片
    4. 買家選擇手機掃一掃並完成付款
      技術分享圖片
      技術分享圖片
    5. 查看交易記錄
      技術分享圖片

商戶登入註冊入口:https://b.alipay.com/signing/productDetail.htm?productId=I1011000290000001000#J_detailItem3
支付寶支付實例下載:https://doc.open.alipay.com/doc2/detail?treeId=62&articleId=103566&docType=1
支付寶支付開發者API:https://doc.open.alipay.com/docs/api.htm?docType=4&apiId=850



二、開發步驟及說明

  • 註冊配置商戶環境
  • 閱讀開發者文檔API:alipay.trade.pay (統一收單交易支付接口)
  • 技術分享圖片
  • 下載DEMO的java版本
  • -

代碼結構:
技術分享圖片
技術分享圖片

1. index.jsp支付寶即時到賬接口調用頁面

 <div class="content">
        <form action="alipayapi.jsp" class="alipayform" method="POST" target="_blank">
            <div class="element" style="margin-top:60px;">
                <div class="legend">支付寶即時到賬交易接口快速通道 </div>
            </div>
            <div class="element">
                <div class="etitle">商戶訂單號:</div>
                <div class="einput"><input type="text" name="WIDout_trade_no" id="out_trade_no"></div>
                <br>
                <div class="mark">註意:商戶訂單號(out_trade_no).必填(建議是英文字母和數字,不能含有特殊字符</div>
            </div>

            <div class="element">
                <div class="etitle">商品名稱:</div>
                <div class="einput"><input type="text" name="WIDsubject" value="test商品123"></div>
                <br>
                <div class="mark">註意:產品名稱(subject),必填(建議中文,英文,數字,不能含有特殊字符)</div>
            </div>
            <div class="element">
                <div class="etitle">付款金額:</div>
                <div class="einput"><input type="text" name="WIDtotal_fee" value="0.01"></div>
                <br>
                <div class="mark">註意:付款金額(total_fee),必填(格式如:1.00,請精確到分)</div>
            </div>
            <div class="element">
                <div class="etitle">商品描述:</div>
                <div class="einput"><input type="text" name="WIDbody" value="即時到賬測試"></div>
                <br>
                <div class="mark">註意:商品描述(body),選填(建議中文,英文,數字,不能含有特殊字符)</div>
            </div>
            <div class="element">
                <input type="submit" class="alisubmit" value ="確認支付">
            </div>
        </form>
    </div>

//訂單名稱,必填
        String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");

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

        //商品描述,可空
        String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8");
        //////////////////////////////////////////////////////////////////////////////////

        //把請求參數打包成數組
        Map<String, String> sParaTemp = new HashMap<String, String>();
        sParaTemp.put("service", AlipayConfig.service);
        sParaTemp.put("partner", AlipayConfig.partner);
        sParaTemp.put("seller_id", AlipayConfig.seller_id);
        sParaTemp.put("_input_charset", AlipayConfig.input_charset);
        sParaTemp.put("payment_type", AlipayConfig.payment_type);
        sParaTemp.put("notify_url", AlipayConfig.notify_url);
        sParaTemp.put("return_url", AlipayConfig.return_url);
        sParaTemp.put("anti_phishing_key", AlipayConfig.anti_phishing_key);
        sParaTemp.put("exter_invoke_ip", AlipayConfig.exter_invoke_ip);
        sParaTemp.put("out_trade_no", out_trade_no);
        sParaTemp.put("subject", subject);
        sParaTemp.put("total_fee", total_fee);
        sParaTemp.put("body", body);
        //其他業務參數根據在線開發文檔,添加參數.文檔地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.O9yorI&treeId=62&articleId=103740&docType=1
        //如sParaTemp.put("參數名","參數值");
        //建立請求
        String sHtmlText = AlipaySubmit.buildRequest(sParaTemp,"get","確認");
        out.println(sHtmlText);

調用AlipaySubmit.buildRequest(sParaTemp,”get”,”確認”);

3.AlipaySubmit組裝調用支付寶網管接口

/**
     * 建立請求,以表單HTML形式構造(默認)
     * @param sParaTemp 請求參數數組
     * @param strMethod 提交方式。兩個值可選:post、get
     * @param strButtonName 確認按鈕顯示文字
     * @return 提交表單HTML文本
     */
    public static String buildRequest(Map<String, String> sParaTemp, String strMethod, String strButtonName) {
        //待請求參數數組
        Map<String, String> sPara = buildRequestPara(sParaTemp);
        List<String> keys = new ArrayList<String>(sPara.keySet());

        StringBuffer sbHtml = new StringBuffer();

        sbHtml.append("<form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"" + ALIPAY_GATEWAY_NEW
                      + "_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 + "\"/>");
        }

        //submit按鈕控件請不要含有name屬性
        sbHtml.append("<input type=\"submit\" value=\"" + strButtonName + "\" style=\"display:none;\"></form>");
        sbHtml.append("<script>document.forms[‘alipaysubmit‘].submit();</script>");

        return sbHtml.toString();
    }
  • 組裝成隱藏form表單自動提交。
    技術分享圖片
  • 同步和異步返回頁面進行對返回參數的獲取和對商戶本身業務邏輯處理


4.說明

public class AlipayConfig {

//↓↓↓↓↓↓↓↓↓↓請在這裏配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    // 合作身份者ID,簽約賬號,以2088開頭由16位純數字組成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
    public static String partner = "";

    // 收款支付寶賬號,以2088開頭由16位純數字組成的字符串,一般情況下收款賬號就是簽約賬號
    public static String seller_id = partner;

    // MD5密鑰,安全檢驗碼,由數字和字母組成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
    public static String key = "";

    // 服務器異步通知頁面路徑  需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
    public static String notify_url = "http://商戶網址/create_direct_pay_by_user-JAVA-UTF-8/notify_url.jsp";

    // 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
    public static String return_url = "http://商戶網址/create_direct_pay_by_user-JAVA-UTF-8/return_url.jsp";

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

    // 調試用,創建TXT日誌文件夾路徑,見AlipayCore.java類中的logResult(String sWord)打印方法。
    public static String log_path = "C:\\";

    // 字符編碼格式 目前支持 gbk 或 utf-8
    public static String input_charset = "utf-8";

    // 支付類型 ,無需修改
    public static String payment_type = "1";

    // 調用的接口名,無需修改
    public static String service = "create_direct_pay_by_user";


//↑↑↑↑↑↑↑↑↑↑請在這裏配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

//↓↓↓↓↓↓↓↓↓↓ 請在這裏配置防釣魚信息,如果沒開通防釣魚功能,為空即可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    // 防釣魚時間戳  若要使用請調用類文件submit中的query_timestamp函數
    public static String anti_phishing_key = "";

    // 客戶端的IP地址 非局域網的外網IP地址,如:221.0.0.1
    public static String exter_invoke_ip = "";

//↑↑↑↑↑↑↑↑↑↑請在這裏配置防釣魚信息,如果沒開通防釣魚功能,為空即可 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

}

pc 端支付寶支付流程