app支付寶支付java服務端代碼

app支付java服務端生成支付單文檔java

    public String aliPay(String amount,Map<String,Object> body){
        //實例化客戶端
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", alipay_appId, alipay_private_key , "json", charset, alipay_public_key, "RSA2");
        //實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.trade.app.pay
        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
        //SDK已經封裝掉了公共參數,這裏只須要傳入業務參數。如下方法爲sdk的model入參方式(model和biz_content同時存在的狀況下取biz_content)。
        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
        model.setPassbackParams(URLEncoder.encode(body.toString()));;  //描述信息  添加附加數據
        model.setSubject("魅格"); //商品標題
        model.setOutTradeNo(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+(int)(Math.random()*90000+10000)); //商家訂單編號
        model.setTimeoutExpress("30m"); //超時關閉該訂單時間
        model.setTotalAmount(amount);  //訂單總金額
        model.setProductCode("QUICK_MSECURITY_PAY"); //銷售產品碼,商家和支付寶簽約的產品碼,爲固定值QUICK_MSECURITY_PAY
        request.setBizModel(model);
        request.setNotifyUrl(alipay_notify_url);  //回調地址
        String orderStr = "";
        try {
                //這裏和普通的接口調用不一樣,使用的是sdkExecute
                AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
                orderStr = response.getBody();
                System.out.println(orderStr);//就是orderString 能夠直接給客戶端請求,無需再作處理。
            } catch (AlipayApiException e) {
                e.printStackTrace();
        }
        return orderStr;
    }

App支付服務器異步通知

文檔地址json

回調獲取支付結果api

Map requestParams = getRequest().getParameterMap();服務器

    public String aliPay_notify(Map requestParams){
        System.out.println("支付寶支付結果通知"+requestParams.toString());
        //獲取支付寶POST過來反饋信息
        Map<String,String> params = new HashMap<String,String>();
        
        for (Iterator 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] + ",";
          }
          //亂碼解決,這段代碼在出現亂碼時使用。
          //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
          params.put(name, valueStr);
         }
        //切記alipaypublickey是支付寶的公鑰,請去open.alipay.com對應應用下查看。
        //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
        try {
        //驗證簽名
boolean flag = AlipaySignature.rsaCheckV1(params, alipay_public_key, charset, "RSA2"); if(flag){ if("TRADE_SUCCESS".equals(params.get("trade_status"))){ //付款金額 String amount = params.get("buyer_pay_amount"); //商戶訂單號 String out_trade_no = params.get("out_trade_no"); //支付寶交易號 String trade_no = params.get("trade_no"); //附加數據 String passback_params = URLDecoder.decode(params.get("passback_params")); } } } catch (AlipayApiException e) { // TODO Auto-generated catch block e.printStackTrace(); }
    return "success"; }

 系統錯誤,請售後再試(ALI40247)app

集成支付寶後一直報這個錯,後來折騰了很久發現,添加的附加數據,裏面有特殊符號,包含特殊符號的參數要用URLEncode編碼dom

相關文章
相關標籤/搜索