java后台生成APP和H5所需要支付寶訂單


java后台對接支付寶接口,然后生成訂單

package com.alipay.util.httpClient;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.domain.AlipayTradeWapPayModel;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.alipay.api.response.AlipayTradeWapPayResponse;
import com.alipay.config.AlipayConfig;
import com.alipay.util.AlipaySubmit;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.*;

/**
 * Created by Administrator on 2016/4/22.
 */
public class AlipayTools {


    private static Logger logger = LoggerFactory.getLogger(AlipayTools.class);

    public static String alipay_wap(String yun_order_no,String subject,String total_fee,String show_url,String body){

        //把請求參數打包成數組
        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("out_trade_no", yun_order_no);
        sParaTemp.put("subject", subject);
        sParaTemp.put("total_fee", total_fee);
        sParaTemp.put("show_url", show_url);
        sParaTemp.put("body", body);
        //其他業務參數根據在線開發文檔,添加參數.文檔地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.2Z6TSk&treeId=60&articleId=103693&docType=1
        //如sParaTemp.put("參數名","參數值");

        //建立請求
        return  AlipaySubmit.buildRequest(sParaTemp, "get", "確認");
    }


    /**
     * app端,會向我們發送請求,獲取一個加密過后的支付寶訂單字符串
     * @param orderId 我們系統的訂單號
     * @param subject 標題
     * @param total_fee 支付金額
     * @param body 訂單說明
     * @param notifyUrl 通知地址
     * @return Map: status:0 成功 1:失敗  orderString 訂單字符串
     */
    public static Map alipayCreateOrderAppNew(String orderId,String subject,String total_fee,String body,String notifyUrl) {
        Map map = new LinkedHashMap();
        //產生的訂單字符串
        String orderString = "";

        //實例化客戶端(參數:網關地址、商戶appid、商戶私鑰、格式、編碼、支付寶公鑰、加密類型)
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig. aliPayUrl,
                AlipayConfig.appId, AlipayConfig.developerSpoon,
                "json", AlipayConfig.input_charset, AlipayConfig.aliPaySpoonNew, "RSA2");

        //實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.trade.app.pay
        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();

        //SDK已經封裝掉了公共參數,這里只需要傳入業務參數。
        // 以下方法為sdk的model入參方式(model和biz_content同時存在的情況下取biz_content)。
        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
        model.setBody(body);//對一筆交易的具體描述信息。如果是多種商品,請將商品描述字符串累加傳給body
        model.setSubject(subject);//商品的標題/交易標題/訂單標題/訂單關鍵字等
        model.setTotalAmount(total_fee);//訂單總金額,單位為元,精確到小數點后兩位,取值范圍[0.01,100000000]
        //model.setProductCode("QUICK_MSECURITY_PAY");//銷售產品碼,商家和支付寶簽約的產品碼
        model.setOutTradeNo(orderId);//商戶網站唯一訂單號,請保證OutTradeNo值每次保證唯一
        model.setTimeoutExpress("30m");//該筆訂單允許的最晚付款時間,逾期將關閉交易。取值范圍:1m~15d。m-分鍾,h-小時,d-天,1c-當天(1c-當天的情況下,無論交易何時創建,都在0點關閉)。 該參數數值不接受小數點, 如 1.5h,可轉換為 90m。
        request.setBizModel(model);
        request.setNotifyUrl(notifyUrl);//商戶外網可以訪問的異步地址
        AlipayTradeAppPayResponse response = null;
        try {
            response = alipayClient.sdkExecute(request); //調用的是sdkExecute接口
            System.out.println(JSONObject.fromObject(response).toString());
        } catch (AlipayApiException e) {
            String massage = "alipay.trade.app.pay接口:訂單簽名錯誤";
            System.out.println(massage);
        }
        if (response.isSuccess()) {
            orderString = response.getBody();
            System.out.println(orderString);
            map.put("status", 0);//生成訂單成功 status:0 成功 1:失敗
            map.put("orderString", orderString);//訂單串
            logger.info("支付寶App支付:支付訂單生成訂單成功out_trade_no----"+orderId);
        } else {
            logger.info("支付寶App支付:支付訂單生成失敗out_trade_no----"+orderId);
            map.put("status",1);//生成訂單成功 status:0 成功 1:失敗
            map.put("orderString", "");//訂單串
        }
        return map;
    }


     /**
     * H5支付生成訂單
     * @param orderId 我們系統的訂單號
     * @param subject 標題
     * @param total_fee 支付金額
     * @param body 訂單說明
     * @param notifyUrl 通知地址
     * @return Map: status:0 成功 1:失敗  orderString 訂單From表單
     */
    public static Map alipayCreateOrderH5(String orderId,String subject,String total_fee,String body,String notifyUrl) {
        Map map = new LinkedHashMap();
        //產生的訂單From表單
        String orderString = "";

        //實例化客戶端(參數:網關地址、商戶appid、商戶私鑰、格式、編碼、支付寶公鑰、加密類型)
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig. aliPayUrl,
                AlipayConfig.appId, AlipayConfig.developerSpoon,
                "json", AlipayConfig.input_charset, AlipayConfig.aliPaySpoonNew, "RSA2");

        //當前調用接口名稱:alipay.trade.wap.pay
        AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
        request.setReturnUrl(AlipayConfig.return_url);
        request.setNotifyUrl(notifyUrl);//商戶外網可以訪問的異步地址


        //使用封裝的Model進行傳值
        AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
        model.setBody(body);//對一筆交易的具體描述信息。如果是多種商品,請將商品描述字符串累加傳給body
        model.setSubject(subject);//商品的標題/交易標題/訂單標題/訂單關鍵字等
        model.setTotalAmount(total_fee);//訂單總金額,單位為元,精確到小數點后兩位,取值范圍[0.01,100000000]
        model.setOutTradeNo(orderId);//商戶網站唯一訂單號,請保證OutTradeNo值每次保證唯一
        model.setTimeoutExpress("30m");//該筆訂單允許的最晚付款時間,逾期將關閉交易。取值范圍:1m~15d。m-分鍾,h-小時,d-天,1c-當天(1c-當天的情況下,無論交易何時創建,都在0點關閉)。 該參數數值不接受小數點, 如 1.5h,可轉換為 90m。
        //model.setQuitUrl(quitUrl);//用戶付款中途退出返回商戶網站的地址
        request.setBizModel(model);

        AlipayTradeWapPayResponse response = null;
        try {
            //調用SDK生成表單
            response = alipayClient.pageExecute(request);
            System.out.println("創建結果:"+JSONObject.fromObject(response).toString());
        } catch (AlipayApiException e) {
            System.out.println("alipay.trade.wap.pay接口:訂單簽名錯誤");
        }
        //判斷是否調用成功
        if (response.isSuccess()) {
            orderString = response.getBody();
            System.out.println("==="+orderString);
            map.put("status", 0);//生成訂單成功 status:0 成功 1:失敗
            map.put("orderString", orderString);//訂單From表單
            logger.info("支付寶H5支付:支付訂單生成訂單成功out_trade_no----"+orderId);
        } else {
            logger.info("支付寶H5支付:支付訂單生成失敗out_trade_no----"+orderId);
            map.put("status",1);//生成訂單成功 status:0 成功 1:失敗
            map.put("orderString", "");//
        }
        return map;
    }

}
package com.alipay.config;

/* *
 *類名:AlipayConfig
 *功能:基礎配置類
 *詳細:設置帳戶有關信息及返回路徑
 *版本:3.4
 *修改日期:2016-03-08
 *說明:
 *以下代碼只是為了方便商戶測試而提供的樣例代碼,商戶可以根據自己網站的需要,按照技術文檔編寫,並非一定要使用該代碼。
 *該代碼僅供學習和研究支付寶接口使用,只是提供一個參考。
 */

import com.shopping.app.config.URL;

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

    // 合作身份者ID,簽約賬號,以2088開頭由16位純數字組成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
    public static String partner = "2088021690******";
    
    // 收款支付寶賬號,以2088開頭由16位純數字組成的字符串,一般情況下收款賬號就是簽約賬號
    public static String seller_id = partner;

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

    // 服務器異步通知頁面路徑  需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
    public static String notify_url = URL.url + "/appAlipayReturn.htm";

    // 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
    public static String return_url = URL.url + "/d_/h5_shopping/m_shoppingPayMentResult.html";

    public static String return_url2 = URL.url + "/d_/dk_native/group_collage/authen_waiting.html";

    public static String show_url=URL.url + "/d_/h5_shopping/m_shoppingPayMentResult.html";


    // 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可d以正常訪問
    public static String return_url_cart5 = URL.url + "/d_/h5_shopping/m_shoppingMyOrder.html";

    public static String show_url_cart5=URL.url + "/d_/h5_shopping/m_shoppingMyOrder.html";


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

    
    // 調試用,創建TXT日志文件夾路徑,見AlipayCore.java類中的logResult(String sWord)打印方法。
    public static String log_path = "d:\\";
        
    // 字符編碼格式 目前支持utf-8
    public static String input_charset = "utf-8";
        
    // 支付類型 ,無需修改
    public static String payment_type = "1";
        
    // 調用的接口名,無需修改
    public static String service = "alipay.wap.create.direct.pay.by.user";


    public static String aliPayUrl="https://openapi.alipay.com/gateway.do";

    //app支付寶id

    public static String appId="20171013****3857";

    //支付寶私鑰
    public static String developerSpoon="MIIEvQIBA****************ASCBKcwggSjAgEAAoIBAQCRlROPLQ2spEhfeEDGeovFIRzINwTSStKk+fdHg/4sP5xF/B4m3LuBeOidjZrfWdVtPKExfKf+6fdRuIoP6PxLeq5+z16BKOx3xeEI2tH81couOufEaZWniT6E3UpbA5H6lHLlAklm/KeCJlPhJvWYVBK/o6ZrEY6yCkSkEGIJtxU5i6nPyNJfGbllJe9Y0D3S/lCCaDKZk+R7MGDHfqYrm3A6hICIXfwq9K+8EoB+nscpjtyScc0iX29BZgJovx303v0JyGFN6yQWFJbE6TcOY4+GfYOBmFYaNE3l7ffNyRrhszIVXwnuitvc/Vf2JDTxpf8+JclB+/hAcbAS38jhAgMBAAECggEBAIubWRFhFA7tz9V1nTB4jhZxZYd+c2oyhIPejcqQAituqK7YUhXUcR980h1ckRsEq83AaZfqQbQLq7c7b3JIa8D6GeHTfH4Bv5owMVfrd5mtbuAcbuuEkRYDX+fLyiUzbEbPGssQAVH4ka4WkTOFx9jXLs+F4O4l/SAxBpgKeelzqaGUQQulbnZQR33xZhz4cYTkaZBQ26eEZqBlLBGw6bbJC22TU19AYJUeA6e1MDG7E4n7AzDmI/ebulukRwDlIdmJ1+6qas0nUqUFuvl+ugpIp/3NZablRMTP+pexG0r5VjvwM2R5OPDDmdQxv6YFWmQQwYWIoE3LhlkTc22+qAECgYEA3r0ShEnUMBHrX/MXtP/eIeRZkBhN2InO6PN/BswWuSSx/5oNmP2MoIKLZoXlvISjGuRHBKEn4Cg20W35HwOVFG41WpTeLupMMEYJrWO1kPW3qs6DZmRzABcvZeoFeq0ZX0boB1buNrrYB59a2g9449pwv8vQFHI+UqL7SabZKiECgYEAp1Jy1qN1CfIa9PEnXVL3ws8rNlHXE26BAmcWDk6pdPP3sR02fw6+WBqV98YJBJW0Eu6ReSvpXNI1SO1I4H16SbpdAAY7PS5o50ooNzBGAmtqVMijv3tZ8Ofuo7Dk2OR+3RQgMYX6Hu4n0HMDmyL85ZaYJ8ZmlDPLygVC5OdiRsECgYBRGHvGaG719YBCFeravpHsuwwU15R4M2x/CjCElAft7rtT+Y3b1uy9f+orMLL9WTldUCG/QMGY7mtPAwBB13cO0jVgvnTKlgmZRda+J2By39O4P6o9vHLWZJqgO301NhLXyqQuD+t5R7vhwpY8cIeuRdjpK9adqx6fzbE6FqJYoQKBgDJ7eLRzmrNGfYWbYLISfzgigzofVRHCzF+qNIhaiVwE451nX/LTwvAYDVk1QbFFbZAstG1npz/fGD6JgOxiT0wBU1/XgXYDE5l80UddZDIEsI8l/eme0NMTVvfCPjmGLxSKpu/qKT29wvtsSBE9bCnk1sFhZb+fJQQttDIV8ZvBAoGAfEESjokpGPTHOCDCGmVnnbas7b5FaIx6wAkvM3HmM4LJfYywD7xuV3WDiY71rPJ+lKuWwF5NM5uuZ4WTKamiFycKiZUha96Btogp9yUR9MTS3KTsQ6Kk7tM7QWdTFEnTVVAP5GXYFafRPYFRFfaYUA+p6yyRUoUeDZ5WGcEcDUI=";

    //支付寶公鑰
    public static String aliPaySpoon="MIIBIjANBgkqh**************KCAQEAyIYSK5SY8pXXRTkqZZM8sTeJ6hpNq5C7SK+dya/eLCoXnwnQ8kQL6BbRMngKplLeZQv9cCRRNfc9p5beFUTjEVwwXXz/i4Vo8yzAZEhcWxf5ksyW3aNCK9wEkaQfZ52G0jTtDDy0J4hTBSTtVmRz1PvBxTsnaoVPTi8XCXKtI6bZ7LQr4hCsPioXDVU1cdtnc3G7CT5WLeCQCGJD/HtsrbZmHse+6tR+V6tan5k83ytsqrs9VgC2rYIM/Gghghb9zGxmLSxqmcTZOgO43XWZuTeqsFRHYXfueHKnozxxMfD8mY3knSi0Ey0ZiZMlEdpaP9bI9S8paN+nvN1CsV8bzwIDAQAB";

    //新的公鑰APP用的公鑰
    public static String aliPaySpoonNew="MIIBIjANBgkqh************AQ8AMIIBCgKCAQEAkZUTjy0NrKRIX3hAxnqLxSEcyDcE0krSpPn3R4P+LD+cRfweJty7gXjonY2a31nVbTyhMXyn/un3UbiKD+j8S3qufs9egSjsd8XhCNrR/NXKLjrnxGmVp4k+hN1KWwOR+pRy5QJJZvyngiZT4Sb1mFQSv6OmaxGOsgpEpBBiCbcVOYupz8jSXxm5ZSXvWNA90v5QgmgymZPkezBgx36mK5twOoSAiF38KvSvvBKAfp7HKY7cknHNIl9vQWYCaL8d9N79CchhTeskFhSWxOk3DmOPhn2DgZhWGjRN5e33zcka4bMyFV8J7orb3P1X9iQ08aX/PiXJQfv4QHGwEt/I4QIDAQAB";


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

    public static String  notify_url_light_service_callback = URL.url+"/json/appAlipayLightService_goods.htm";
    public static String notify_url_videoCourseTopic_callBack = URL.url+"/json/aliPayVideoCourseTopic_callBack.htm";
    public static String notify_url_lightservice_video_callback = URL.url+"/json/aliPaylightService_video_callBack.htm";

    public static String aliyun_notify_url_ApplyMavinOrder = URL.url + "/json/pay_aliyun_ApplyMavinOrder_callBack.htm";
    public static String aliyun_notify_mavinEnter_callBack = URL.url + "/json/aliyun_mavinEnter_callBack.htm";
    public static String aliyun_notify_lightService0_goods_callBack = URL.url + "/callback/aliyun_notify_lightService0_goods_callBack.htm";
    public static String aliyun_notify_url_AuditOrder_callBack = URL.url + "/notify/pay_ali_auditOrder_callBack.htm";
}

 

測試生成的H5返回的From表單是否有效,直接寫一個HTML。將測試的串放在里面。例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form name="punchout_form" method="post" action="https://openapi.alipay.com/gateway.do?sign=Q5F5g3u1WzCWMjKcmlzzcDmTzOONj726qM3OF8RJP5axv2nOC5lfnslpLesalgUt%2FScgSUknzQYxQzshixIS5TcHIvofFHQSd9j5a8CiolwXcKREwupcplapxxXtvUm94J2%2FgvuFjk%2F989Pt2Qf6h6c6tx3LilC4%2B8nWS2WnlGvR0jWty0KzChX3VEscN6zxTEpZz98jQhc6p29lupsYQEif97OVgljhX8PcNgA%2B5fm%2F7K5dsLvF7KSpuZi4%2FGFYZ2FrQNx8oRFErl7IRsPK5%2FL1cdaIwckgmNbcdffElVddJ6RYsk8UtnND2XPVRtvDLTucTOVyjVpXMD1rdMV6xw%3D%3D&timestamp=2019-08-08+12%3A14%3A03&sign_type=RSA2&notify_url=http%3A%2F%2Faptest.yingyanghome.com%2FappTeamAlipayReturn.htm&charset=utf-8&app_id=2017101309283857&method=alipay.trade.wap.pay&return_url=http%3A%2F%2Faptest.yingyanghome.com%2Fd_%2Fh5_shopping%2Fm_shoppingPayMentResult.html&version=1.0&alipay_sdk=alipay-sdk-java-dynamicVersionNo&format=json">
<input type="hidden" name="biz_content" value="{&quot;body&quot;:&quot;H5進行東康簽約小組&quot;,&quot;out_trade_no&quot;:&quot;3820120190808121403&quot;,&quot;subject&quot;:&quot;支付東康&quot;,&quot;timeout_express&quot;:&quot;30m&quot;,&quot;total_amount&quot;:&quot;0.02&quot;}">
<input type="submit" value="立即支付" style="display:none" >
</form>
<script>document.forms[0].submit();</script>

</body>
</html>

 

看一下能否跳轉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM