支付寶h5支付從支付到退款


先說明,支付是之前寫好的,調用的是支付寶舊的即時到賬接口,所也沒有去集成應用,退款調用的是無密即時到賬退款接口!!!

https://doc.open.alipay.com/支付寶文檔資料,螞蟻金服開發平台。首先從開放平台找到即時到賬接口資料,上面有demo可以下載,下載demo,修改里面的配置參數即可接通wep支付寶支付(公鑰查看支付寶和私鑰生成支付寶有生成工具提供)(ps:私鑰生成后需要在支付寶上面配置,放到一個地方去才生效)。具體代碼修改根據公司需要,支付回掉簽名錯誤問題,demo上面的valueStr不需要進行轉碼,直接注釋掉這一行就行。

下一步生成二維碼(我用的是zxing.jar包生成),通過支付寶掃碼進行h5跳轉到demo里面的掉起支付頁面,完成支付,回掉處理根據業務需求寫。如果在參數上面加入

sParaTemp.put("app_pay", "Y");//啟用該參數啟用APP錢包支付。(!!!)

這樣在瀏覽器上面wap支付的時候就能直接打開支付寶app。

 

下面說退款,退款不要做什么h5頁面跳轉,只需要后台httpclient去請求支付寶無密退款接口即可,接口地址:https://mapi.alipay.com/gateway.do。

/**
     * 處理支付寶退款功能
     * @param money                    退款金額
     * @param alipaycode            支付寶交易流水號
     * @return
     * @throws DocumentException
     */
    public boolean oldAlipayRefund(String money,String alipaycode) throws DocumentException{
        boolean bl=false;
        Map resultMap=null;
        try {
            resultMap = AssemblyParameter(money, alipaycode);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();return bl;
        }
        String result = HttpClientUtil.post(AlipayConfig.old_refund_url, null, resultMap);
        Document document = DocumentHelper.parseText(result);
        Element root =document.getRootElement();
        List<Element> list =root.elements();
        for(Element l:list){
            if(l.getName().toLowerCase().equals("is_success")){
                if(l.getText().equals("T")){
                    bl=true;
                }
            }
        }
        return bl;
    }
    
    /**
     * 拼裝支付寶支付接口所需參數,
     * @param money            退款金額
     * @param alipaycode    支付寶支付完成返回流水號
     * @return
     * @throws UnsupportedEncodingException 
     */
    public static Map AssemblyParameter(String money,String alipaycode) throws UnsupportedEncodingException{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        Map<String, String> sParaTemp = new HashMap<String, String>();
        sParaTemp.put("service", AlipayConfig.oldrefundservice);
        sParaTemp.put("partner", AlipayConfig.partner);
        sParaTemp.put("_input_charset", AlipayConfig.input_charset);
        sParaTemp.put("sign_type", AlipayConfig.sign_type);
        //sParaTemp.put("notify_url", "");
        sParaTemp.put("seller_email", AlipayConfig.seller_email);
        sParaTemp.put("seller_user_id", AlipayConfig.partner);
        sParaTemp.put("refund_date",DateUtil.normalDateTimeFormat());//退款時間
        sParaTemp.put("batch_no", sdf.format(new Date())+System.currentTimeMillis()/1000);//退款號
        sParaTemp.put("batch_num", "1");//退款筆數
        sParaTemp.put("detail_data",new String((alipaycode+"^"+money+"^正常退款").getBytes("ISO-8859-1"), "utf-8"));//退款描述//alipaycode+"^"+money+"^"+"aaa"
        sParaTemp=AlipaySubmit.buildRequestPara(sParaTemp);
        sdf=null;
        //建立請求
        //String sHtmlText = AlipaySubmit.buildRequest(sParaTemp,"get","確認");
        return sParaTemp;
    }

這個地方有一點需要注意,detail_data,需要轉碼,不然一直是簽名錯誤。退款流水號是支付寶返回的一個流水號,支付完成的時候是需要保存數據庫的,退款需要用到這個流水號!!!


免責聲明!

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



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