国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
網(wǎng)站如何集成支付寶

網(wǎng)站如何集成支付寶

國內(nèi)電子商務(wù)系統(tǒng)實(shí)現(xiàn)的基本流程如下:
客戶在系統(tǒng)內(nèi)下訂單 -> 系統(tǒng)根據(jù)訂單生成支付寶接口url -> 客戶通過url使用支付寶(網(wǎng)上銀行)付款 -> 支付寶將客戶的付款完成信息發(fā)送給電子商務(wù)系統(tǒng) -> 系統(tǒng)收到支付寶信息后確定客戶訂單已經(jīng)付款 -> 進(jìn)行發(fā)貨等后續(xù)流程。

 

在開始下面的內(nèi)容之前,你要先有一個(gè)支付寶賬戶,如果要集成支付寶接口,你還必須申請(qǐng)開通服務(wù)(關(guān)于如何開通,可以直接到支付寶網(wǎng)站上申請(qǐng)).在服務(wù)開通后,支付寶會(huì)給你2個(gè)字符串編號(hào):1個(gè)partnerId(合作伙伴ID),還有1個(gè)securityCode(安全碼).當(dāng)你拿到這2個(gè)碼的時(shí)候就可以開始下面的內(nèi)容了.

(1)如何調(diào)用支付寶接口?(將客戶的訂單信息按照既定的規(guī)則生成一個(gè)url跳轉(zhuǎn)到支付寶網(wǎng)站)

通過下面方法[makeOrderAlipayUrl(HttpServletRequest httpRequest,Order order)]的調(diào)用得到支付寶的url,然后進(jìn)行跳轉(zhuǎn)(response.sendRedirect(url);).

Java代碼
 
  1. /**    
  2.      * 根據(jù)訂單生成支付寶接口URL.    
  3.      * @param httpRequest    
  4.      * @param order 訂單實(shí)例    
  5.      * @return    
  6.      * @throws Exception    
  7.      */     
  8.     public static String makeOrderAlipayUrl(HttpServletRequest httpRequest,Order order) throws Exception {      
  9.         HashMap hm = new HashMap();      
  10.         hm.put("_input_charset",httpRequest.getCharacterEncoding());//采用相同的編碼方式      
  11.         hm.put("body","您在www.xxx.com上的訂單");//填寫在跳到支付寶頁面上顯示的付款內(nèi)容信息      
  12.         hm.put("discount","-5");//填寫折扣信息 -5表示抵扣5元      
  13.         hm.put("logistics_fee","10");//物流費(fèi)用      
  14.         hm.put("logistics_payment","BUYER_PAY");//物流費(fèi)用支付人 BUYER_PAY=買家支付物流費(fèi)用      
  15.         hm.put("logistics_type","EXPRESS");//物流方式      
  16.         hm.put("notify_url","http://www.xxx.com/notifyurl.jsp");//客戶付款后,支付寶調(diào)用的頁面      
  17.         hm.put("out_trade_no",order.getId());//外部交易號(hào),最好具有唯一性,在獲取支付寶發(fā)來的付款信息時(shí)使用.      
  18.         hm.put("partner",partnerId);//partnerId(合作伙伴ID)      
  19.         hm.put("agent",partnerId);//partnerId(合作伙伴ID)      
  20.         hm.put("payment_type","1");//支付類型 1=商品購買,2=服務(wù)購買,...      
  21.         hm.put("price","105.30");//訂單金額信息      
  22.         hm.put("quantity","1");//訂單商品數(shù)量,一般都是寫1,它是按照整個(gè)訂單包來計(jì)算      
  23.         hm.put("return_url","http://www.xxx.com/ReturnUrl.jsp");//客戶付款成功后,顯示給客戶的頁面      
  24.         hm.put("seller_email","alipay@xxx.com");//你的支付寶賬戶email      
  25.         hm.put("service","create_direct_pay_by_user");//create_direct_pay_by_user=直接付款,trade_create_by_buyer 擔(dān)保付款       
  26.         hm.put("subject","www.xxx.com的訂單");//填寫在跳到支付寶頁面上顯示的付款標(biāo)題信息      
  27.         String payGateway = "https://www.alipay.com/cooperate/gateway.do?";//跳轉(zhuǎn)到支付寶的url頭      
  28.         return makeUrl(hm,securityCode,httpRequest.getCharacterEncoding(),payGateway);//securityCode(安全碼)       
  29.     }      
  30.           
  31.           
  32.     /**    
  33.      * 根據(jù)傳入的參數(shù)生成alipay的支付URL    
  34.      * @param hm 參數(shù)值    
  35.      * @param securityCode 安全碼    
  36.      * @param charset 編碼    
  37.      * @param payGateway 支付寶gateway    
  38.      * @return    
  39.      */     
  40.     public static String makeUrl(HashMap hm,String securityCode,String charset,String payGateway) throws Exception{      
  41.         List keys = new ArrayList(hm.keySet());      
  42.         Collections.sort(keys);//支付寶要求參數(shù)必須按字母排序      
  43.         StringBuffer content = new StringBuffer();      
  44.         for (int i = 0; i < keys.size(); i++) {      
  45.             content.append((String) keys.get(i));      
  46.             content.append("=");      
  47.             content.append((String) hm.get((String) keys.get(i)));      
  48.             if (i != keys.size() - 1) {      
  49.                 content.append("&");      
  50.             }      
  51.         }      
  52.         content.append(securityCode);      
  53.         String sign = md5(content.toString(),charset);      
  54.         content.delete(0,content.length());      
  55.         content.append(payGateway);      
  56.         for (int i = 0; i < keys.size(); i++) {      
  57.             content.append(keys.get(i));      
  58.             content.append("=");      
  59.             content.append(URLEncoder.encode((String) hm.get(keys.get(i)), charset));      
  60.             content.append("&");      
  61.         }      
  62.         content.append("sign=");      
  63.         content.append(sign);      
  64.         content.append("&sign_type=MD5");      
  65.         keys.clear();      
  66.         keys = null;      
  67.         return content.toString();      
  68.     }      
  69.           
  70.     /**    
  71.      * 生成md5編碼字符串.    
  72.      * @param str 源字符串    
  73.      * @param charset 編碼方式    
  74.      * @return    
  75.      *    
  76.      */     
  77.     public static String md5(String str,String charset) {      
  78.         if (str == null)      
  79.             return null;      
  80.         char hexDigits[] = { '0''1''2''3''4''5''6''7''8''9',      
  81.                 'a''b''c''d''e''f' };      
  82.               
  83.         MessageDigest md5MessageDigest = null;      
  84.         byte[] md5Bytes = null;      
  85.         char md5Chars[] = null;      
  86.         byte[] strBytes = null;      
  87.         try {      
  88.             strBytes = str.getBytes(charset);      
  89.             md5MessageDigest = MessageDigest.getInstance("MD5");      
  90.             md5MessageDigest.update(strBytes);      
  91.             md5Bytes = md5MessageDigest.digest();      
  92.             int j = md5Bytes.length;      
  93.             md5Chars = new char[j * 2];      
  94.             int k = 0;      
  95.             for (int i = 0; i < j; i++) {      
  96.                 byte md5Byte = md5Bytes[i];      
  97.                 md5Chars[k++] = hexDigits[md5Byte >>> 4 & 0xf];      
  98.                 md5Chars[k++] = hexDigits[md5Byte & 0xf];      
  99.             }      
  100.             return new String(md5Chars);      
  101.         } catch (NoSuchAlgorithmException e) {      
  102.             //Log.output(e.toString(), Log.STD_ERR);      
  103.             return null;      
  104.         } catch (UnsupportedEncodingException e) {      
  105.             //Log.output(e.toString(), Log.STD_ERR);      
  106.             return null;      
  107.         } finally {      
  108.             md5MessageDigest = null;      
  109.             strBytes = null;      
  110.             md5Bytes = null;      
  111.         }      
  112.     }    

 

 

 

當(dāng)客戶通過接口url付款后,支付寶會(huì)自動(dòng)的去調(diào)用前面提供的[notify_url]參數(shù)中的url.

(2)支付寶將付款信息返回給系統(tǒng)
當(dāng)客戶付款后,支付寶就會(huì)自動(dòng)調(diào)用上面表單提供的[notify_url],下面是一個(gè)[notifyurl.jsp]的一個(gè)例子:

Java代碼
 
  1. <%@ page contentType="text/html;charset=UTF-8"%><%@ page import="com.soft4j.AlipayMgr"%><%      
  2.     String ret = AlipayMgr.insert(request);      
  3.     if(ret==null){      
  4.         out.print("success");//成功接收支付寶發(fā)來的付款信息      
  5.     }else{      
  6.         out.print("fail");//出錯(cuò)      
  7.     }      
  8. %>  

  

  

如果確認(rèn)收到支付寶發(fā)來的客戶付款信息,則返回"success",這樣子支付寶就知道系統(tǒng)已經(jīng)收到信息了;否則返回"fail",這樣支付寶會(huì)過一段時(shí)間后再次發(fā)來。其實(shí),只有當(dāng)支付寶收到"success"的返回信息后才會(huì)停止發(fā)送付款信息,否則會(huì)自動(dòng)的每隔一段時(shí)間就調(diào)用上面
的[notify_url]通信接口。

(3)系統(tǒng)處理支付寶發(fā)來的付款信息 

Java代碼
 
  1. /*    
  2.  * Created on 2005-6-12    
  3.  * Author stephen    
  4.  * Email zhoujianqiang AT gmail DOT com    
  5.  * CopyRight(C)2005-2008 , All rights reserved.    
  6.  */     
  7. package com.soft4j;      
  •      
  • import java.sql.Connection;      
  • import java.sql.SQLException;      
  • import java.util.Enumeration;      
  • import java.util.Vector;      
  • import javax.servlet.http.HttpServletRequest;      
  •      
  • /**    
  •  * 支付寶付款通知接口.    
  •  *     
  •  * @author stephen    
  •  * @version 1.0.0    
  •  */     
  • public final class NotifyUrlMgr {      
  •           
  •           
  •     public static String insert(HttpServletRequest httpRequest) {      
  •               
  •         //定義變量和進(jìn)行必要的初始化工作      
  •         Enumeration parameterNames = null;      
  •         String parameterName = null;      
  •         String parameterValue = null;      
  •         int count = 0;      
  •         Vector[] params = null;      
  •         Vector vParameterName = new Vector();      
  •         Vector vParameterValue = new Vector();      
  •               
  •         try {      
  •             String orderId = httpRequest.getParameter("out_trade_no");//訂單號(hào)      
  •             if(orderId==null||"".equals(orderId)) orderId="-1";      
  •             parameterNames = httpRequest.getParameterNames();      
  •             boolean isPrint = false;      
  •             while (parameterNames.hasMoreElements()) {//循環(huán)收取支付寶發(fā)來的所有參數(shù)信息      
  •                 parameterName = (String) parameterNames.nextElement();      
  •                 parameterValue = httpRequest.getParameter(parameterName);      
  •                 if(parameterValue==null) parameterValue="";      
  •                 vParameterName.add(parameterName);      
  •                 vParameterValue.add(parameterValue);      
  •                 count++;      
  •             }      
  •                   
  •             //這里添加對(duì)收到信息的處理:一般是將這些信息存入數(shù)據(jù)庫,然后對(duì)客戶的訂單進(jìn)行處理.      
  •                   
  •             return null;      
  •         } catch (Exception e) {      
  •             return e.toString();      
  •         } finally {      
  •             //      
  •         }      
  •     }      
  •      
  • }  
  •  

      

    這樣系統(tǒng)可以在客戶使用支付寶付款后,自動(dòng)的根據(jù)支付寶發(fā)來的付款信息確認(rèn)客戶的付款情況,并進(jìn)行相應(yīng)的后續(xù)操作.

    如果你的電子商務(wù)系統(tǒng)不是java環(huán)境的,也可以參考上面的內(nèi)容。

    本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
    打開APP,閱讀全文并永久保存 查看更多類似文章
    猜你喜歡
    類似文章
    JAVA版微信支付V3-完全版
    Android入門:封裝一個(gè)HTTP請(qǐng)求的輔助類
    Java發(fā)送HTTP的POST請(qǐng)求
    Android開源項(xiàng)目xUtils HttpUtils模塊分析
    跨域問題解決方案(HttpClient安全跨域 & jsonp跨域)
    java動(dòng)態(tài)編譯執(zhí)行
    更多類似文章 >>
    生活服務(wù)
    分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
    綁定賬號(hào)成功
    后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
    如果VIP功能使用有故障,
    可點(diǎn)擊這里聯(lián)系客服!

    聯(lián)系客服