1. 程式人生 > >支付寶PC端 網頁支付 相關研究

支付寶PC端 網頁支付 相關研究

這個官方的文件例子還是靠譜的,可能不太好調例子

好的部落格還是很多的,不過我沒怎麼查,這個

https://docs.open.alipay.com/270/105899/

https://docs.open.alipay.com/58/103584

官方的

必須知道他需要什麼東西,看過官方的文件與例子才行

這個跟微信也有相似:

首先配置檔案

商戶號,支付寶號,私匙,公匙,簽名,閘道器,回撥

controller

@RequestMapping(value="/pagePay",produces="application/json;charset=UTF-8")
    public String pagePay(ForAlipay record){
        JSONObject json = new JSONObject();
        String form = alipayService.pagePay(record);
        json.put("data", form);
        return json.toJSONString();
    }

service實現類:

@Override
    public String pagePay(ForAlipay record) {
        //支付頁面介面對應的request
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        //在公共引數中設定回跳和通知地址
        //return_url:買家支付成功後跳轉的頁面,僅當買家支付成功後跳轉一次
        //notify_url:非同步通知,下單成功後,支付寶伺服器通知商戶服務,並把訂單的狀態通知給商戶,商戶根據返回的訂單狀態,修改網站訂單的狀態
        alipayRequest.setReturnUrl(AlipayConfig.return_url);
        alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
        AlipayTradePagePayModel model = new AlipayTradePagePayModel();
        //TbOrderForm order = tbOrderFormMapper.selectByPrimaryKey(record.getOut_trade_no());
        model.setOutTradeNo(record.getOut_trade_no());
        model.setTotalAmount(100+"");
        model.setSubject(record.getSubject());
        model.setBody(record.getBody());
        model.setProductCode("FAST_INSTANT_TRADE_PAY");    
        //自填
        model.setBody("a");
        model.setSubject("aa");
        
        
        
        alipayRequest.setBizModel(model);
        String form="";
        try {
            form = alipayClient.pageExecute(alipayRequest).getBody();
        } catch (AlipayApiException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return form;
    },

注意他的引數有幾個不為空,不然報錯setSubjec,他返回的是一個html頁面,人家給畫好了

支付成功調回調函式:

他比較有意思,非同步通知,同步跳轉,

買家付款成功後,如果介面中指定有return_url ,買家付完款後會跳到 return_url所在的頁面,這個頁面可以展示給客戶看,這個頁面只有付款成功才會跳轉.

notify_url:伺服器後臺通知,這個頁面是程式後臺執行的(買家和賣家都看不到),買家付完款後,支付寶會呼叫notify_url這個頁面所在的頁面並把相應的引數傳遞到這個頁面,這個頁面根據支付寶傳遞過來的引數修改網站訂單的狀態,更新完訂單後需要在頁面上打印出一個success給支付寶,如果反饋給支付寶的不是success,支付寶會繼續呼叫這個頁面. 
流程:買家付完款(trade_status=WAIT_SELLER_SEND_GOODS)--->支付寶通知notify_url---& gt;如果反饋給支付寶的是success(表示成功,這個狀態下不再反饋,如果不是繼續通知,一般第一次傳送和第二次傳送的時間間隔是3分鐘)
剩下的過程,賣家發貨,買家確認收貨,交易成功都是這個流程

通知service

@RequestMapping(value = "/notifyU",produces = "application/json;charset=utf-8")
    public String notifyU(HttpServletRequest req){
        String notify = "";
        try {
            notify = alipayService.notify(req);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return notify;
    }
    
    /**
     * 
     * @Title: returnU
     * @Description: 支付寶同步跳轉,支付成功後,獲取支付寶get過來的資訊,驗籤
     * @author: chen
     * @param: @param req
     * @param: @return   
     * @return: String   
     * @throws
     */
    @RequestMapping(value = "/returnU",produces = "application/json;charset=utf-8")
    public String returnU(HttpServletRequest req){
        JSONObject json = new JSONObject();
        String returnU = "";
        try {
            returnU = alipayService.returnU(req);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            json.put("code", ResponseStatusCode.PAY_ERR);
            json.put("msg", "支付失敗");
        }
        if("success".equals(returnU)){
            json.put("code", ResponseStatusCode.SUCC);
        }else{
            json.put("code", ResponseStatusCode.PAY_ERR);
            json.put("msg", "支付失敗");
        }
        return json.toJSONString();
    }
    
    /**
     * 
     * @Title: wxNotify
     * @Description: 微信支付通知
     * @author: chen
     * @param: @param req
     * @param: @return   
     * @return: String   
     * @throws
     */
    @RequestMapping(value = "/wxNotify",produces = "application/json;charset=utf-8")
    public String wxNotify(HttpServletRequest req){
        
        String notify = wXPayService.notify(req);
        
        return notify;
    }

具體的實現類,相信你可以搜到,太多了不記錄了