久久四虎_校园春色亚洲色图_成人福利在线观看_好吊色一区二区三区_国产欧美日韩在线播放_大肉大捧一进一出好爽mba_亚洲成a人无码_五月天综合在线_91亚洲国产成人精品一区_涩涩涩在线视频

世聯翻譯公司如何電子系統“網頁支付接入與使用規則 ”中文翻譯_世聯翻譯公司

首頁 > 新聞中心 > 翻譯公司資訊 >

世聯翻譯公司如何電子系統“網頁支付接入與使用規則 ”中文翻譯

世聯翻譯公司如何電子系統“網頁支付接入與使用規則 ”中文翻譯
手機網頁支付接入與使用規則 
手機網頁即時到賬授權接口(alipay.wap.trade.create.direct) 
手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)
附錄文檔 
版本號:1.0 
 
Alipay (China) Internet Technology Ltd.  All right reserved
手機網頁即時到賬接口附錄文檔
 
1 Document Description
1.1 Document Description
本文檔是《手機網頁即時到賬接口》附錄文檔,它詳細解釋了在技術接入與使用過程中需要注意的地方,以幫助商戶避免風險產生。 
Please contact the related technology support if you have any questions after reading.
1.2 Business terms
Table 1-1 Business Terms
Terms                   Description 
Demand The process of transmitting the data requiring for delivery to the
Return Alipay will send feedbacks to the commercial user websites after Alipay processes them according to the obtained data. 
Sensitive words With sensitively–political tendency, tendency of violence, unhealthy or uncivilized words. 
 
2 Attribution of liability 
All the rules involved in the document are the preventive measures against the main risks during the access and using process of interface. All the commercial users shall care about them. Please strictly follow the interface technological files (手機網頁即時到賬接口.pdf), example codes, and the access and using rules of this file(手機網頁支付接入與使用規則.pdf). Otherwise, they caused risks, assets loss or expanded cases shall be shouldered by the commercial users.
 
 
3 Technology access rules
Table 3-1 Technological access rules
Types Details Reasons
Account No. Configured cooperator ID and safety checking key must be guaranteed matching with the signing information.  Prevent abnormal using of interface or assets loss 
必須保護合作者身份ID、安全校驗碼key、商戶的公私秘鑰、支付寶公鑰的隱私性 Prevent the signed account information being stolen, loss in capital and despitefully utilized by others 
測試完畢后,要把測試賬號立刻更換成簽約賬號。 使用測試賬號時,手續費按照3%扣除。 
Safety 商戶必須以DNS解析的方式訪問支付寶接口,不要設置DNS cache,不要綁定支付寶IP。如果為了商戶自身安全必須綁定支付寶IP時,必須向支付寶的技術支持人員備案。 Once the IP address changes, the commercial address cannot request or access Alipay so that commercial user business cannot be used directly.  
組成 手機網頁支付產品由手機網頁即時到賬授權接口(alipay.wap.trade.create.direct)、手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)兩個接口組成。 使用時少了其中任何一個接口,都無法正常使用該產品。 
必須先調用手機網頁即時到賬授權接口(alipay.wap.trade.create.direct)獲得授權令牌,再調用手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)完成付款。 手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)依賴授權令牌(request_token)才能完成付款,而該授權令牌需要通過手機網頁即時到賬授權接口(alipay.wap.trade.create.direct)獲取。 
請求時簽名邏輯 All the required parameters shall be sequenced as per the format of parameter name=parameter value in the order of lexicographic order of first character. The character strings to be signed shall be spliced according to the rules of “Parameter name 1=Parameter value 1& Parameter name 2= Parameter value 2&….& Parameter value N= Parameter value N”. 避免報異常錯誤,如:簽名不正確。
When signing the parameters for the request, these parameters must originate from the request parameter list and remove the parameters sign in the list. 避免報異常錯誤,如:簽名不正確。
When signing the requested parameters, as for the parameters of “NULL” in the request parameter list, if selecting to use them, then the parameter value shall not be NULL or NULL value. 避免報異常錯誤,各種錯誤碼需參考錯誤碼列表。 
Parameter setting Among the request parameter list, the parameters “Not FULL” must be configured. Avoid abnormal using of interface 
Among the variant parameters requiring multiple selection of NULL in the request parameter list, it is must to configure one at least. Avoid abnormal using of interface 
It is mandatory to configure as per the format of all parameters in the request parameter list. Avoid abnormal using of interface 
It is mandatory to set up the request parameters “_input_charset” (encoding format). That is, the parameter shall not be NULL and this parameter shall be added into the signature operation.而且只能設置其值為utf-8,即本產品不支持GBK編碼格式。 避免報異常錯誤,如:簽名不正確。
seller_email是收款時的支付寶賬號,需要與partner對應的支付寶賬號為同一個,也就是說收款支付寶賬號必須是簽約時的支付寶賬號。 避免簽約支付寶賬號出現資金受損的可能 
簽名方式僅支持RSA、MD5兩種。如果要使用RSA簽名時,簽名方式要設置成0001。 避免簽名不成功 
參數req_data中節點信息都須按照XML節點格式設置,無順序要求。不可空的節點信息必須設置?煽盏墓濣c支持不設置,也支持設置了但是空值。 如果設置不符合XML格式或不可空節點信息設置疏漏,請求時不會報錯,但是返回時支付寶會提示0004,req_data illegal。 
Interface structure The gateway of Alipay must be used to send request message to the Alipay as per the following request gateway:
http://wappaygw.alipay.com/service/rest.htm。 Avoid being angled by phishing website. 
發送給支付寶的請求,請求參數不僅包含參與簽名的參數,還包含參數sign。 避免報異常錯誤,如:簽名不正確。
發送給支付寶的請求,如果使用form表單傳輸,需要按照以下要求編寫: 
action的值必須為“http://wappaygw.alipay.com/service/rest.htm?_input_charset=該值”,如: http://wappaygw.alipay.com/service/rest.htm?_input_charset=utf-8。 不允許寫成完整的請求鏈接地址,即禁止http://wappaygw.alipay.com/service/rest.htm?后帶有所有要請求給支付寶的請求參數數據; 
<form>與</form>之間需包含所有要請求給支付寶的參數,且每個參數的格式為<input type="hidden" name="參數名" value="參數值" />; 
在眾多請求參數中,請求參數_input_charset(編碼格式)必須存在于form表單中,即form表單中必須含有<input type="hidden" name="_input_charset" value="參數值">; 
<form>與</form>之間包含的數據只允許是要請求給支付寶的參數,禁止出現商戶自行命名,不在接口技術文檔請求參數列表中的其他數據; 
form表單的method屬性,可自行選擇get、post兩種。但是,手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)只支持get方式傳輸。
避免請求支付寶時報錯,錯誤碼為簽名不正確; 
手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)如果用POST提交,頁面顯示會為空白。 專業翻譯公司
Data transmission It is a mandatory to us https protocol. Avoid abnormal using of interface  專業翻譯公司
在手機網頁即時到賬授權接口(alipay.wap.trade.create.direct)中,建議使用模擬遠程傳輸方式提交信息及獲取返回信息。并且,提交方式僅支持POST。 避免報異常錯誤(如:簽名不正確),得不到授權令牌。 
在手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)中,提交方式僅支持GET。 如果用POST提交,頁面顯示會為空白。 
Notifying returning verification 在手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)頁面跳轉同步通知中,在對通知的參數做簽名時,這些參數必須來源于支付寶通知回來的參數,并且除去列表中的參數sign,先對這些參數根據“參數名=參數值”的格式,由字母a到z的順序進行排序,再依照“參數名1=參數值1&參數名2=參數值2&…&參數名N=參數值N”的規則進行拼接,得到的簽名結果與獲取到的參數sign值做比較。 驗證返回的簽名 
在手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)服務器異步通知中,需要XML解析明文狀態下的參數notify_data,獲得節點notify_id的值。 避免無法正常獲得通知ID(notify_id),導致校驗是否是支付寶發送的驗證失敗。 
在手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)服務器異步通知中,如果有設置服務器異步通知路徑,則必須使用獲取到的參數notify_id再次請求支付寶,獲取是否是支付寶發送的驗證結果。該請求鏈接是: 
https://mapi.alipay.com/gateway.do?partner=合作者身份ID&notify_id=通知ID的值。 驗證是否是支付寶發來的請求 
在手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)服務器異步通知中,對明文狀態下的服務器異步通知參數(除去參數sign)不需要先排序,而是直接依照通知返回的參數順序,以“參數名1=參數值1&參數名2=參數值2&…&參數名N=參數值N”的規則進行拼接,從而得到待簽名字符串。 避免驗證簽名不正確 
返回數據處理 支付寶主動發送通知,當商戶接收到通知數據后必須給支付寶返回“success”字符串,不允許返回其他多余字符。 如果商戶返回給支付寶的信息不是“success”,支付寶最多重復發送7次通知。 
必須保證設置的通知路徑互聯網上能訪問得到,且訪問順暢。 避免接收不到支付寶發送的通知 
在手機網頁即時到賬授權接口(alipay.wap.trade.create.direct)中,需要先對獲得的返回數據做解碼(URLDECODE),再對這些數據做字符串切割,獲得參數res_data的值。此時,如果該接口設置的簽名方式sec_id是0001(RSA),還需要對參數res_data做RSA解密,簽名方式sec_id是MD5時不需要該步驟。最后對變成明文的參數res_data的值做XML解析,獲得授權令牌request_token。 返回數據是一串編碼過的字符串。需要對字符串做解碼(URLDECODE)、切割、RSA解密、XML解析等步驟。其中任何一步出現問題,則無法獲得授權令牌request_token。 
在手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)頁面跳轉同步通知中,可直接用GET方式獲得返回數據。 頁面跳轉同步通知以純URL帶參數的模式返回信息 
在手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)服務器異步通知中:
􀁺 如果簽名方式sec_id設置的是0001(RSA),則需要先對參數notify_data做RSA解密獲得明文;
􀁺 如果簽名方式sec_id設置的是MD5,則不需要解密。 
當簽名方式是0001(RSA)時,參數notify_data是密文狀態,需要解密。 
在手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)服務器異步通知中,如果要獲得需要的信息,還需要對參數notify_data做XML解析獲得子節點信息。 參數notify_data是XML格式的字符串 
必須對返回的數據進行處理。 以便商戶能夠了解接口的使用情況,以及進行商戶的后續業務操作。 
在服務器異步通知頁面文件中,需保證商戶的所有業務全部運行完成,才能執行打印success的動作。 避免異步通知不正常,如收不到通知或業務處理沒有完成卻告訴支付寶系統已經處理完成。 
It is suggested each refunding operation shall be recorded to the log operation database of the commercial user website. It is used to check or trail after the business processing conditions when necessary. 
Interface environment Interface cannot be embedded in “iframe” framework. Avoid abnormal using of interface  
Error code processing 請求出錯啦 例如seller_account_name不是郵箱格式、請求參數缺失等請求參數不符合設置規則。 
為保障用戶賬戶安全,禁止非手機訪問。 該筆交易不是在真實手機上創建或執行的。該類情況一般出現在商戶測試階段,通過pc瀏覽器來請求支付寶時報錯。 
Automatically formulated interface code rules If code illustrations provided by Alipay are not used, then it is mandatory to process chapters and the document technology interface rules, interface using rules and testing flow rules to formulate the interface code meeting the commercial user website project according to the signature mechanism and notification returning data in technological document. Avoid abnormal using of interface  
 
4 Interface access rules
Table 4-1 Interface using rules
Type Standardization Reasons
使用時 對同一筆還沒創建支付寶交易的商戶訂單,支持重復調用手機網頁即時到賬授權接口(alipay.wap.trade.create.direct),但每一次的req_id值必須保證唯一。 每次請求req_id的值須保證唯一 
對同一筆還沒創建支付寶交易的商戶訂單,支持重復調用手機網頁即時到賬授權接口(alipay.wap.trade.create.direct),且每次返回的授權令牌都有效,有效時間為24小時。 當支付寶系統中還沒有為商戶的某筆訂單創建支付寶交易時,商戶方可以對該筆訂單重復調用手機網頁即時到賬授權接口(alipay.wap.trade.create.direct),但每次返回的授權令牌不會相同。 
手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)支持重復調用,前提是交易基本信息(買家、賣家、交易金額、超時時間、商品名稱等)在多次調用中保持一致,且交易尚未完成支付。 防止支付失敗 
手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)重復調用時,也支持同一個token(授權令牌)重復調用,但需要保證該token(授權令牌)對應的交易的買家尚未確定,即該筆交易還未在支付寶中創建。 避免報“買家不符”的錯誤 
填寫買家支付寶賬號時,不能與賣家的支付寶賬號相同。 避免報錯,如錯誤碼:創建交易失敗。 
客戶端內嵌webview方式實現,需要開啟js以及css設置。 避免出現因內嵌引起的兼容性或者界面布局異常、亂碼等問題。 
在請求參數中不能存在影響請求格式的特殊字符,如:url、xml格式的特殊字符等。 避免交易失敗 
建議商戶的業務判斷依據以notify_url(服務器異步通知)為準,call_back_url頁面文件只做界面展示用途。 避免商戶訂單數據與支付寶交易數據不同步 
本接口支持的眾多支付通道中,儲蓄卡支付和信用卡支付一旦進入手機網銀系統頁面,支付寶將無法控制訂單的支付效率問題。 各網銀系統的運作及各網銀與支付寶間的交互因為網絡或其他因素導致支付時的速度快慢不一 
業務應用注意事項 支付寶支付手續費扣取模式分為兩種: 
􀁺 實時扣費模式:一般都是收款賬戶扣費,或采用合同指定固定扣款支付寶賬戶扣費; 
􀁺 月結手續費模式:實時交易不扣手續費,月底賬單統一結算。 
實時扣費時,在扣費支付寶賬號的賬務明細中可馬上查到扣費記錄;但月結模式下,則不會查到。 
在集成接口的過程中,如果商戶使用seller_email作為收款賬戶,則當需要修改該支付寶賬戶名稱時,商戶必須在程序中做相應修改。 避免支付過程中會出現賣家賬戶不存在的錯誤 
測試時 調試階段時,建議使用1分錢(0.01元)進行測試 降低測試成本 
Network Guarantee network smooth 防止支付時或支付完成后的訂單同步出現各類異常 
 
 
5 集成流程詳解 
5.1 接入準備 
1. 確認是否已開通手機網頁支付功能 
使用簽約支付寶賬號登錄https://b.alipay.com/order/serviceIndex.htm,訂單狀態為“已完結”表示手機網頁支付權限已開通,如下圖所示。 
 
圖5-1 查詢訂單狀態
如果無法確認,建議聯系與支付寶簽約協議時的貴公司業務人員。 
2. 確認簽約支付寶賬號 
集成時需要使用簽約的支付寶賬號相關信息,包括:支付寶登錄賬號、合作者身份ID(PID)、交易安全校驗碼(KEY)。獲得方法請參見“7.1 如何獲得PID與密鑰”。 
3. 確認網站的開發語言 
開發語言是用指定的一種語言來開發網站。支付寶提供的代碼示例目前包含PHP、ASP.NET、JAVA三種。 
4. 確認網站編碼格式 
查詢網站使用的是何種編碼格式,可通過在網站網頁上點擊右鍵,找到“編碼”,打開擴展箭頭后查看,默認選中的編碼即為網站的編碼格式。支付寶提供的代碼示例目前僅包含UTF-8一種。 
5. 確認網站簽名方式 
簽名方式指的是對字符串做加密與解密時的方法。支付寶提供的代碼示例目前包含RSA、MD5兩種。
6. 確認開發環境 
本機電腦調試環境 
各開發語言對應的開發環境、調試工具等。 
服務器調試環境 
– 服務器需要支持各開發語言對應的環境,如:支持PHP開發語言的SSL服務、CURL服務等。 
– 能夠把本地文件上傳到服務器上的通道與權限,如:FTP,SFTP傳輸。 
 
5.2 集成 
5.2.1 接口代碼示例配置運行 
解壓下載到的接口資料壓縮文件(文件名是WS_WAP_PAYWAP.zip),根據商戶自身情況選擇JAVA(文件夾名為WS_WAP_PAYWAP-JAVA-UTF-8)、PHP(文件夾名為WS_WAP_PAYWAP-PHP-UTF-8)、C#(文件夾名為WS_WAP_PAYWAP-CSHARP-UTF-8)三種開發語言代碼示例文件夾中的一個。 
1. JAVA配置流程(以eclipse為例) 
步驟1: 導入代碼 
啟動JAVA開發軟件,把“WS_WAP_PAYWAP-JAVA-UTF-8”文件夾中的“src\com”文件夾、“WebRoot\mages”文件夾、“WebRoot\log”文件夾、“WebRoot\WEB-INF\lib”文件夾、“WebRoot\alipayapi.jsp”、“WebRoot\call_back_url.jsp”、“WebRoot\notify_url.jsp”全部導入到開發環境中。“src\com”文件夾中的文件是類文件,無法與支付寶PC端的其他接口混用。 
步驟2: 配置基本信息 
在JAVA開發環境中,打開“src\com\alipay\config”類目下“AlipayConfig.java”文件,配置partner(合作身份者ID)、key(交易安全校驗碼)、private_key(商戶私鑰)、public_key(支付寶公鑰)、sign_type(簽名類型)等基本信息參數。 
表5-1 JAVA基本信息配置
 
參數 含義 
partner 合作身份者ID,以2088開頭由16位純數字組成的字符串。請參考“7.1 如何獲得PID與密鑰”。 
key 交易安全檢驗碼,由數字和字母組成的32位字符串。當sign_type設置為MD5時,該參數設置才有效。請參考“7.1 如何獲得PID與密鑰”。 
private_key 商戶方的私鑰。當sign_type設置為0001時,該參數設置才有效。請參考“7.2 RSA密鑰生成與使用”。 
public_key 支付寶的公鑰。當sign_type設置為0001時,該參數設置才有效。請參考“7.2 RSA密鑰生成與使用”。 
sign_type 簽名方式。在手機網頁支付的接口中僅支持兩種簽名方式,MD5和RSA。對該參數設置的值分別是MD5、0001。 
input_charset 字符編碼格式。在手機網頁支付的接口中僅支持utf-8。無需修改。 
 
 
步驟3: 配置業務信息 
打開“alipayapi.jsp”文件。配置req_id(請求號)、notify_url(服務器異步通知頁面路徑)、call_back_url(頁面跳轉同步通知頁面路徑)、seller_email(賣家支付寶帳戶)、out_trade_no(商戶訂單號)、subject(訂單名稱)、total_fee(付款金額)這幾個常用業務參數信息。請參考“7.3 業務數據傳遞”和“7.4 如何增加擴展業務參數”。 
步驟4: 編寫同步通知業務邏輯 
打開“call_back_url.jsp”文件。在注釋指定位置“//請在這里加上商戶的業務邏輯程序代碼”寫入商戶的業務邏輯代碼。請參考“7.5 如何更新訂單”。 
步驟5: 編寫異步通知業務邏輯 
打開“notify_url.jsp”文件(notify_url.jsp需保證無任何HTML代碼)。在注釋指定位置“//請在這里加上商戶的業務邏輯程序代碼”寫入商戶的業務邏輯代碼。請參考“7.5 如何更新訂單”。需要注意的是,簽名方式為0001時,需要先解密,MD5時則不需要。解密后,需要XML解析方可獲取參數信息。 
2. PHP配置流程 
 
步驟1: 導入代碼 
啟動PHP開發軟件,把“WS_WAP_PAYWAP-PHP-UTF-8”文件夾中除去“readme.txt”與“openssl”文件夾外的其他所有文件全部導入到開發環境中。“lib”文件夾中的文件是類文件,無法與支付寶PC端的其他接口混用。 
步驟2: 配置基本信息 
在PHP開發環境中,打開“alipay.config.php”文件,配置partner(合作身份者ID)、key(交易安全校驗碼)、private_key(商戶私鑰)、public_key(支付寶公鑰)、sign_type(簽名類型)等基本信息參數。 
 
表5-2 PHP基本信息配置 
 
參數 解釋 
partner 合作身份者ID,以2088開頭由16位純數字組成的字符串。請參考“7.1 如何獲得PID與密鑰”。 
key 交易安全檢驗碼,由數字和字母組成的32位字符串。當sign_type設置為MD5時,該參數設置才有效。請參考“7.1 如何獲得PID與密鑰”。 
private_key 商戶方的私鑰。當sign_type設置為0001時,該參數設置才有效。請參考“7.2 RSA密鑰生成與使用”。 
public_key 支付寶的公鑰。當sign_type設置為0001時,該參數設置才有效。請參考“7.2 RSA密鑰生成與使用”。 
sign_type 簽名方式。在手機網頁支付的接口中僅支持兩種簽名方式,MD5和RSA。對該參數設置的值分別是MD5、0001。 
input_charset 字符編碼格式。在手機網頁支付的接口中僅支持utf-8。無需修改。 
cacert ca證書路徑地址,用于curl中ssl校驗。需要保證cacert.pem文件在當前文件夾目錄中。無需修改。 
transport 訪問模式,根據自己的服務器是否支持ssl訪問,若支持請選擇https;若不支持請選擇http。該參數只關聯到同步通知或異步通知時,驗證是否是支付寶發來的請求功能中的支付寶請求地址。無需修改。 
 
步驟3: 配置業務信息 
打開“alipayapi.php”文件。配置req_id(請求號)、notify_url(服務器異步通知頁面路徑)、call_back_url(頁面跳轉同步通知頁面路徑)、seller_email(賣家支付寶帳戶)、out_trade_no(商戶訂單號)、subject(訂單名稱)、total_fee(付款金額)這幾個常用業務參數信息。請參考“7.3 業務數據傳遞”和“7.4 如何增加擴展業務參數”。 
步驟4: 編寫同步通知業務邏輯 
打開“call_back_url.php”文件。在注釋指定位置“//請在這里加上商戶的業務邏輯程序代碼”寫入商戶的業務邏輯代碼。請參考“7.5 如何更新訂單”。 
步驟5: 編寫異步通知業務邏輯
打開“notify_url.php”文件(notify_url.php需保證無任何HTML代碼)。在注釋指定位置“//請在這里加上商戶的業務邏輯程序代碼”寫入商戶的業務邏輯代碼。請參考“7.5 如何更新訂單”。需要注意的是,簽名方式為0001時,需要先解密,MD5時則不需要。解密后,需要XML解析方可獲取參數信息。 
3. ASP.NET(C#)配置流程 
步驟1: 導入代碼 
啟動.NET開發軟件,把“WS_WAP_PAYWAP-CSHARP-UTF-8”文件夾中除去“readme.txt”與“Web.Config”外的其他所有文件全部導入到開發環境中。為防止占用“default.aspx”的名稱,可以把“default.aspx”與“default.aspx.cs”兩個文件中的核心代碼拷貝到新頁面文件中去。“app_code”文件夾中的文件是類文件,無法與支付寶PC端的其他接口混用。 
步驟2: 配置基本信息 
在.NET開發環境中,打開“app_code”類目下的“AlipayConfig.cs”文件,配置partner(合作身份者ID)、key(交易安全校驗碼)、private_key(商戶私鑰)、public_key(支付寶公鑰)、sign_type(簽名類型)等基本信息參數。 
表5-3 ASP.NET(C#)基本信息配置
參數 解釋 
partner 合作身份者ID,以2088開頭由16位純數字組成的字符串。請參考“7.1 如何獲得PID與密鑰”。 
key 交易安全檢驗碼,由數字和字母組成的32位字符串。當sign_type設置為MD5時,該參數設置才有效。請參考“7.1 如何獲得PID與密鑰”。 
private_key 商戶方的私鑰。當sign_type設置為0001時,該參數設置才有效。請參考“7.2 RSA密鑰生成與使用”。 
public_key 支付寶的公鑰。當sign_type設置為0001時,該參數設置才有效。請參考“7.2 RSA密鑰生成與使用”。 
sign_type 簽名方式。在手機網頁支付的接口中僅支持兩種簽名方式,MD5和RSA。對該參數設置的值分別是MD5、0001。 
input_charset 字符編碼格式。在手機網頁支付的接口中僅支持utf-8。無需修改。 
 
步驟3: 配置業務信息 
打開“default.aspx.cs”文件。配置req_id(請求號)、notify_url(服務器異步通知頁面路徑)、call_back_url(頁面跳轉同步通知頁面路徑)、seller_email(賣家支付寶帳戶)、out_trade_no(商戶訂單號)、subject(訂單名稱)、total_fee(付款金額)這幾個常用業務參數信息。請參考“7.3 業務數據傳遞”和“7.4 如何增加擴展業務參數”。 
步驟4: 編寫同步通知業務邏輯 
打開“call_back_url.aspx”、“call_back_url.aspx.cs”文件。call_back_url.aspx為前端頁面可顯示一些信息供用戶查看,call_back_url.aspx.cs為后臺業務代碼編寫處。 
在注釋指定位置“//請在這里加上商戶的業務邏輯程序代碼”寫入商戶的業務邏輯代碼。請參考“7.5 如何更新訂單”。 
步驟5: 編寫異步通知業務邏輯 
打開“notify_url.aspx.cs”文件。notify_url.aspx需保證無任何HTML代碼,notify_url.aspx.cs為后臺業務代碼編寫處。 
在注釋指定位置“//請在這里加上商戶的業務邏輯程序代碼”寫入商戶的業務邏輯代碼。請參考“7.5 如何更新訂單”。需要注意的是,簽名方式為0001時,需要先解密,MD5時則不需要。解密后,需要XML解析方可獲取參數信息。 
5.2.2 接口代碼示例運行邏輯詳解 
1. JAVA(以eclipse為例) 
步驟1: 商戶為手機網頁即時到賬授權接口(alipay.wap.trade.create.direct)的請求參數配置好數據后,組裝進數組sParaTempToken中,再對該數組做空值過濾(調用AlipayCore類中的paraFilter函數)。 
{req_data=<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-JAVA-UTF-8/notify_url.jsp</notify_url><call_back_url>http://127.0.0.1:8080/WS_WAP_PAYWAP-JAVA-UTF-8/call_back_url.jsp</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306170001</out_trade_no><subject>測試</subject><total_fee>0.01</total_fee></direct_trade_create_req>, service=alipay.wap.trade.create.direct, sec_id=0001, partner=2088501624560335, _input_charset=utf-8, req_id=201306170001, v=2.0, format=xml} 
步驟2: 對該數組做參數名首字母升序的排序動作,此時的數組為待簽名數組,并把待簽名數組轉變成待簽名字符串(調用AlipayCore類中的createLinkString函數),排序規則請參見“3 技術接入規則”中的“請求時簽名邏輯”。 
_input_charset=utf-8&format=xml&partner=2088501624560335&req_data=<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-JAVA-UTF-8/notify_url.jsp</notify_url><call_back_url>http://127.0.0.1:8080/WS_WAP_PAYWAP-JAVA-UTF-8/call_back_url.jsp</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306170001</out_trade_no><subject>測試</subject><total_fee>0.01</total_fee></direct_trade_create_req>&req_id=201306170001&sec_id=0001&service=alipay.wap.trade.create.direct&v=2.0 
步驟3:對該字符串做簽名(調用AlipaySubmit類中的buildRequestMysign函數),規則參見“3 技術接入規則”中的“請求時簽名邏輯”。 
O8DH9HG2yRkbUrIz0jtKaPZRcWqqgcuGEtI6576Yibh60iX7azXTq2D4ZYWaX16kBy8MNSE4PBuPcrxe66kQW/Ufhoa/f+0jeUx5RC3/A0as+/vOOCmQnO0VTyRTp2DHLvcL3k9EKow6FsFuQHZPpHsQnzzRUSlQ+vGI+dPYUSU= 
步驟4: 把簽名結果賦值給參數sign,并把sign加入之前的待簽名數組中,此時得到的便是要請求給支付寶的全部數據。 
{req_data=<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-JAVA-UTF-8/notify_url.jsp</notify_url><call_back_url>http://127.0.0.1:8080/WS_WAP_PAYWAP-JAVA-UTF-8/call_back_url.jsp</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306170001</out_trade_no><subject>測試</subject><total_fee>0.01</total_fee></direct_trade_create_req>, service=alipay.wap.trade.create.direct, partner=2088501624560335, sec_id=0001, _input_charset=utf-8, req_id=201306170001, sign=O8DH9HG2yRkbUrIz0jtKaPZRcWqqgcuGEtI6576Yibh60iX7azXTq2D4ZYWaX16kBy8MNSE4PBuPcrxe66kQW/Ufhoa/f+0jeUx5RC3/A0as+/vOOCmQnO0VTyRTp2DHLvcL3k9EKow6FsFuQHZPpHsQnzzRUSlQ+vGI+dPYUSU=, format=xml, v=2.0} 
步驟5:模擬遠程HTTP協議請求支付寶(調用AlipaySubmit類中的buildRequest (String ALIPAY_GATEWAY_NEW, String strParaFileName, String strFilePath,Map<String, String> sParaTemp) throws Exception函數),得到支付寶的處理結果,字符串文本格式。 
res_data=wzpwl6nSd%2B0aYMQaltXjmEdJgeAkLH2dupVrHNNKknd33wwqgbDlhj3gAur%2F1WTLSFWQcw8Q%2Fb8XKk8r0Ti14pTbH9wzhyOeElGfd4Ks1HKkqZFXLX7YVhfBH7lHjJiNFBzMZhMAGy%2BhAgiwbw4mvIjQF%2Bu%2BGS3SRK%2B4wy2QmptEEcqVseMgHr56MYeFfdvxzbx%2FT06%2B%2Fg5pdIre94H6ZL0mDR8IobzQnJV1mq%2B9YMXNUspsRzXCHhcbKEq7xqDVdE5eb43LvNKa8ypR9hMiYd5%2FOLAuYnpetM81IzGNC83kioh5hsSoLgEErCrMklxucR7X5U6l22APeK6i%2FbT8TA%3D%3D&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088501624560335&req_id=201306170001&sign=ll2LBlP66aZArPUJV9Vd3Tfo6m7PLiI8IQRNjjwFjg6NXS4PCjTdY6PlCnB5MmllNFurI2J5GuL7LUCKVSlO58hUpxQrllpoYNorKx%2BUKXYOAmPilRa2zHry%2BjVUlW9qNp4jLI2oDY8lgBbKr%2BkL3BYO0GU0Stv4zAhokAaF9ho%3D&v=2.0 
步驟6:對該結果做URLDECODE解碼工作(調用urldecode函數)。 
res_data=wzpwl6nSd+0aYMQaltXjmEdJgeAkLH2dupVrHNNKknd33wwqgbDlhj3gAur/1WTLSFWQcw8Q/b8XKk8r0Ti14pTbH9wzhyOeElGfd4Ks1HKkqZFXLX7YVhfBH7lHjJiNFBzMZhMAGy+hAgiwbw4mvIjQF+u+GS3SRK+4wy2QmptEEcqVseMgHr56MYeFfdvxzbx/T06+/g5pdIre94H6ZL0mDR8IobzQnJV1mq+9YMXNUspsRzXCHhcbKEq7xqDVdE5eb43LvNKa8ypR9hMiYd5/OLAuYnpetM81IzGNC83kioh5hsSoLgEErCrMklxucR7X5U6l22APeK6i/bT8TA==&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088501624560335&req_id=201306170001&sign=ll2LBlP66aZArPUJV9Vd3Tfo6m7PLiI8IQRNjjwFjg6NXS4PCjTdY6PlCnB5MmllNFurI2J5GuL7LUCKVSlO58hUpxQrllpoYNorKx+UKXYOAmPilRa2zHry+jVUlW9qNp4jLI2oDY8lgBbKr+kL3BYO0GU0Stv4zAhokAaF9ho=&v=2.0 
步驟7:對這串結果字符串做字符串切割,獲取返回參數的信息。注意,如果簽名方式設置的是0001(RSA),那么還需要對這結果中的返回參數res_data做解密工作;如果簽名方式設置的是MD5,則結果中的返回參數res_data直接顯示明文。 
res_data=<?xml version="1.0" encoding="utf-8"?><direct_trade_create_res><request_token>2013061725bc6b978788d6f2459d0af9a49ea2f3</request_token></direct_trade_create_res>&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088501624560335&req_id=201306170001&sign=ll2LBlP66aZArPUJV9Vd3Tfo6m7PLiI8IQRNjjwFjg6NXS4PCjTdY6PlCnB5MmllNFurI2J5GuL7LUCKVSlO58hUpxQrllpoYNorKx+UKXYOAmPilRa2zHry+jVUlW9qNp4jLI2oDY8lgBbKr+kL3BYO0GU0Stv4zAhokAaF9ho=&v=2.0 
接著把XML結構的res_data的值做XML解析,從中獲取子節點request_token的值(這一系列過程需調用AlipaySubmit類中的parseResponse函數),這個值就是授權令牌。 
2013061725bc6b978788d6f2459d0af9a49ea2f3 
步驟8:商戶為手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)的請求參數配置好數據后,與步驟一、二、三、四同理,把數據組裝進數組sParaTemp中。 
{req_data=<auth_and_execute_req><request_token>2013061725bc6b978788d6f2459d0af9a49ea2f3</request_token></auth_and_execute_req>, service=alipay.wap.auth.authAndExecute, sec_id=0001, partner=2088501624560335, _input_charset=utf-8, v=2.0, format=xml} 
對該數組做空值過濾(調用AlipayCore類中的paraFilter函數),對該數組做參數名首字母升序的排序動作,把待簽名數組轉變成待簽名字符串,對該字符串做簽名(調用AlipaySubmit類中的buildRequestMysign函數),把簽名結果賦值給參數sign,并把sign加入之前的待簽名數組中,此時得到的便是要請求給支付寶的全部數據。 
{req_data=<auth_and_execute_req><request_token>2013061725bc6b978788d6f2459d0af9a49ea2f3</request_token></auth_and_execute_req>, service=alipay.wap.auth.authAndExecute, partner=2088501624560335, sec_id=0001, _input_charset=utf-8, sign=jqUVcsnO3CX2c3/b2WqALKL+AJgxnB9rT87LJ31BBHqNd6DixUmtd4ht6qz9TqpX9nuI+EaPnYIhPcF+okas2bGn7ju4V3TS0805g/7mELsuW8/kcGOd/+zLvLqH7tXY0oilb4Bq/fTb8FewVuBWSMkZXIzovc9he0c1dTklXPQ=, format=xml, v=2.0} 
步驟9:以GET方式,請求支付寶(調用AlipaySubmit類中的buildRequest(String ALIPAY_GATEWAY_NEW, Map<String, String> sParaTemp, String strMethod, String strButtonName)函數),此時商戶的頁面會自動跳轉至支付寶收銀臺。
 
圖5-2 跳轉至支付寶收銀臺
后面的動作全由買家在支付寶收銀臺中操作完成。
步驟10: 當這筆交易被買家支付成功后支付寶收銀臺上顯示該筆交易成功,并提示用戶可返回商戶網站。買家點擊該功能按鈕后,則當前界面會跳轉回商戶設置的call_back_url頁面文件去,如果長時間沒有點擊,則當前支付寶收銀臺界面會自動跳轉至商戶call_back_url頁面文件去。此時商戶的call_back_url頁面會收到一串帶有處理結果數據的鏈接地址。 
http://127.0.0.1:8080/WS_WAP_PAYWAP-JAVA-UTF-8/call_back_url.jsp?out_trade_no=cs201306170001&request_token=requestToken&result=success&trade_no=2013061741934035&sign=UCUm6GVdi7MEcNnDbD7UnG0UyEyUtuKOSuhPQbrGxUvLUmRJEctMm5NxYV%2FtvWT0VCGbM%2F4zaAlYy1EP4bFLisoyprq%2FQ9H5XMnO%2FOZ5E1XclGXiD%2FLMbMGoYCqNmI22MxMZ0OmL9UoUSrT2f4%2B8EDCtkDsnUsG82K4GnjSmJ2w%3D&sign_type=0001 
步驟11: 用GET方式獲得這些返回數據,與步驟一、二、三、四同理,對數組params做空值過濾、參數名首字母升序的排序、待簽名數組轉變成待簽名字符串。 
out_trade_no=cs201306170001&request_token=requestToken&result=success&trade_no=2013061741934035 
對該字符串做簽名驗證(這一系列動作為調用AlipayNotify類中的verifyReturn函數完成),得到布爾類型的驗證結果,完成call_back_url頁面文件的驗證動作。 
步驟12: 買家對一筆交易付款完成的同時,除了支付寶會觸發頁面跳轉至call_back_url文件的同步通知動作,還會自動觸發服務器異步通知頁面文件(商戶設置參數notify_url的值)。此時,商戶的notify_url文件也會收到支付寶異步通知回來的數據。 
{service=alipay.wap.trade.create.direct, sign=V2fgcO2jwZ5G/HcDRS3N7m2TNqRSHFqvF7wQ6xD52NgLtNMhx2H+4H/yv5yKZxt1xY5K1aMfv6MsO0fpKAYZaZFg+WYs925IbAzpscbK72fzuhvfikjbEvuOLHY+LGNXwkn+VhQBBNkHs4GNJSM1iZ1jcCxm8NU9oANviZDMAcg=, sec_id=0001, v=1.0, notify_data=0R5IeCoVWRerPIERgTFrQOUfIiw0FHmHGe6elY6VYp1WZU5bRsQkK5ekMcceD412gO+KgqPzvAKVQG1h3dwuhWgaHPdL5oNj1eIzf4PUuRYOb7qCwFMqpNDQ9Jznbm89kCqjenhWSIwQ/2Aad+4RPHOKy9AzAWut02MiW7g8gH49Nb1rjki+u7QQN+xQ/Q/Fr4f2RlcoiutfsYB2mCy8smtjaH2LmE5wNz0I5yHMxnf9+NCkjmOJdZZrOC2wXly/tzLY6w+zef+m5s184D80HejiUPOlS8dBtmEPs+SQzA5N7eu0BF1pPj9m7wyTINf6k4GlkQtvNM6UZd2cwuthwZeYcax5Db0rWYyDaQOCH/gEUShzD6za84Gpj9/grKnvMy65C7ihmcb4wtA7CNiQSnLiQZ3ksUGjB0WiwTpL9JeQqyVWJZiSpRXt73B9/qT1hzf5K1CWHTzD0zfOjifFbSrXQmAt5oIoMM49W7Ds95fTZNde3czzf/hrcUQEI3LNW+6e975+Vl4O+fmxxBeGaI1Ls1EBTdZpDoNl35U7uhzdkbBzJR4AYY6H9xD2QmjtAS3GelIXpiqC29FbwwFLbEQM/a9xAS3KS8jIyDWEAK4dJi3U+F/QTismfjp7dfT2KqU89wsqJ+BtMwWLaOPvz1BSpj1TVYYmgK5MdLjh6S+GVH4ka/RcU2nGqpO1cNHBHa0j2wY7Uu1p3SiSa62NTbu0wvLqiT3fs6K6PDwVkxGDAPsQaXvCGrMRhhVLc7M5AcCVSBCJd4LAJU/BfTcYZjiFcKSlSSYKMNFZRusNcFtzrbvi1u4gwHRnRYr11Z/pwGbQ5LtxV083lXtEkJ1fWFzt84hxfcOGH+o9EgJBKyIahQfyHfRir5quiixBqp5xWR8DU5nJNAW+/MLgPzNYt+uaIPadqrBt/j7+0gdgFEdLzPLncI9h0VdlmdgO+CvxJ1aKYi2pDY64oTzm87CN/Fiof1n8SjZRgGh/ClxIJHunI9DCmVszMtVkQhJwQzkIj9YnV+3n0Q3wjos3iE69WJjHk+DpN8ARZiAJEFKtGT9lMnIf1JfbpXmdM1arFV1doMEb8vKLN4kHioR4DhVyDvaLfo4rsgvGcLSB65R4Ya4tVdk1e0+vnk+U/NMk9zrJf39hInyBoazUpkPIqmmQIAvkpSbnbGuZUdqri9fame2e/gPkUzYqzo/gt6OCuzIdtVtVI0kQXGfCz9XpazmYbTcKA9Ck6z6WF2lN7lIJH9DSNB7lCDM/cKD7xEZ5lFRucz1sOsvZNpNhH8R7EnyQYEo7NM9ph8gDfgaVaaWh1+13TJfwvC5WBOi+5KyKh+6qb4Z98tFkxrqyU2Kn6hFAoQ==} 
步驟13: 用POST方式獲得這些返回數據。如果簽名方式設置的是0001(RSA)時,需要先對這些數據中的參數notify_data做解密;如果簽名方式設置的是MD5,因為直接返回明文,所以不需要解密。 
{service=alipay.wap.trade.create.direct, sign=V2fgcO2jwZ5G/HcDRS3N7m2TNqRSHFqvF7wQ6xD52NgLtNMhx2H+4H/yv5yKZxt1xY5K1aMfv6MsO0fpKAYZaZFg+WYs925IbAzpscbK72fzuhvfikjbEvuOLHY+LGNXwkn+VhQBBNkHs4GNJSM1iZ1jcCxm8NU9oANviZDMAcg=, sec_id=0001, v=1.0, notify_data=<notify><payment_type>1</payment_type><subject>測試</subject><trade_no>2013061741934035</trade_no><buyer_email>xxxxxxx@xx.com</buyer_email><gmt_create>2013-06-17 19:15:58</gmt_create><notify_type>trade_status_sync</notify_type><quantity>1</quantity><out_trade_no>cs201306170001</out_trade_no><notify_time>2013-06-17 19:16:09</notify_time><seller_id>2088501624560335</seller_id><trade_status>TRADE_FINISHED</trade_status><is_total_fee_adjust>N</is_total_fee_adjust><total_fee>0.01</total_fee><gmt_payment>2013-06-17 19:16:08</gmt_payment><seller_email>alipayrisk10@alipay.com</seller_email><gmt_close>2013-06-17 19:16:08</gmt_close><price>0.01</price><buyer_id>2088002396712354</buyer_id><notify_id>78fca98191478a5e64459d8ef88601183y</notify_id><use_coupon>N</use_coupon></notify>} 
notify_url異步通知的簽名驗證規律與call_back_url不同,商戶只需要順序獲取支付寶的返回數據,不需要對這些參數排序。因此,直接把數組params轉變成待簽名字符串。 
service=alipay.wap.trade.create.direct&v=1.0&sec_id=0001&notify_data=<notify><payment_type>1</payment_type><subject>測試</subject><trade_no>2013061741934035</trade_no><buyer_email>xxxxxxx@xx.com</buyer_email><gmt_create>2013-06-17 19:15:58</gmt_create><notify_type>trade_status_sync</notify_type><quantity>1</quantity><out_trade_no>cs201306170001</out_trade_no><notify_time>2013-06-17 19:16:09</notify_time><seller_id>2088501624560335</seller_id><trade_status>TRADE_FINISHED</trade_status><is_total_fee_adjust>N</is_total_fee_adjust><total_fee>0.01</total_fee><gmt_payment>2013-06-17 19:16:08</gmt_payment><seller_email>alipayrisk10@alipay.com</seller_email><gmt_close>2013-06-17 19:16:08</gmt_close><price>0.01</price><buyer_id>2088002396712354</buyer_id><notify_id>78fca98191478a5e64459d8ef88601183y</notify_id><use_coupon>N</use_coupon></notify> 
接著對該字符串做簽名驗證(這一系列動作調用AlipayNotify類中的verifyNotify函數),得到布爾類型的驗證結果,完成notify_url頁面文件的驗證動作。 
步驟14: 在notify_url頁面文件中,參數notify_data是XML結構的字符串,需要先XML解析,再獲取需要的子節點數據。 
2. PHP 
步驟1: 商戶為手機網頁即時到賬授權接口(alipay.wap.trade.create.direct)的請求參數配置好數據后,組裝進數組$para_token中,再對該數組做空值過濾(調用AlipayCore類中的paraFilter函數)。 
$para_token = array( 
"service" => "alipay.wap.trade.create.direct", 
"partner" => "2088501624560335", 
"sec_id" => "0001", 
"format" => "xml", 
"v" => "2.0", 
"req_id" => "201306140001", 
"req_data" => "<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-PHP-UTF-8/notify_url.php</notify_url><call_back_url>http://127.0.0.1:8800/WS_WAP_PAYWAP-PHP-UTF-8/call_back_url.php</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306140001</out_trade_no><subject>測試</subject><total_fee>0.01</total_fee></direct_trade_create_req>", 
"_input_charset" => "utf-8" 
); 
步驟2:對該數組做參數名首字母升序的排序動作(調用AlipayCore類中的argSort函數)(排序規則請參見“3 技術接入規則”中的“請求時簽名邏輯”),此時得到的數組為待簽名數組。 
$para_token = array( 
"_input_charset"=> "utf-8", 
"format" => "xml", 
"partner" => "2088501624560335", 
"req_data" => "<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-PHP-UTF-8/notify_url.php</notify_url><call_back_url>http://127.0.0.1:8800/WS_WAP_PAYWAP-PHP-UTF-8/call_back_url.php</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306140001</out_trade_no><subject>測試</subject><total_fee>0.01</total_fee></direct_trade_create_req>", 
"req_id" => "201306140001", 
"sec_id" => "0001", 
"service" => "alipay.wap.trade.create.direct", 
"v" => "2.0" 
); 
步驟3: 把待簽名數組轉變成待簽名字符串。 
_input_charset=utf-8&format=xml&partner=2088501624560335&req_data=<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-PHP-UTF-8/notify_url.php</notify_url><call_back_url>http://127.0.0.1:8800/WS_WAP_PAYWAP-PHP-UTF-8/call_back_url.php</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306140001</out_trade_no><subject>測試</subject><total_fee>0.01</total_fee></direct_trade_create_req>&req_id=201306140001&sec_id=0001&service=alipay.wap.trade.create.direct&v=2.0 
并對該字符串做簽名(調用AlipaySubmit類中的buildRequestMysign函數),轉變規則請參見“3 技術接入規則”中的“請求時簽名邏輯”。 
EGb8F+aWwBhotwNSQwF9Sik2OzQffV1Val1STvrRj4MzE1W4pLM6Mfjk3/4Vj3ci4Pspcm1OLDHPZ2JQNsFruS6d4bFSQrtEF52irwSF+re42+TBTRe7w8TZAjBnBBLLknerq0DvN86SfA6QaXOl/nOfgcMfCx3YtJnX9u2Yi/k= 
步驟4:把簽名結果賦值給參數sign,并把sign加入之前的待簽名數組中,此時得到的便是要請求給支付寶的全部數據。 
$para_token = array( 
"_input_charset"=> "utf-8", 
"format" => "xml", 
"partner" => "2088501624560335", 
"req_data" => "<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-PHP-UTF-8/notify_url.php</notify_url><call_back_url>http://127.0.0.1:8800/WS_WAP_PAYWAP-PHP-UTF-8/call_back_url.php</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306140001</out_trade_no><subject>測試</subject><total_fee>0.01</total_fee></direct_trade_create_req>", 
"req_id" => "201306140001", 
"sec_id" => "0001", 
"service" => "alipay.wap.trade.create.direct", 
"v" => "2.0", 
"sign" => "EGb8F+aWwBhotwNSQwF9Sik2OzQffV1Val1STvrRj4MzE1W4pLM6Mfjk3/4Vj3ci4Pspcm1OLDHPZ2JQNsFruS6d4bFSQrtEF52irwSF+re42+TBTRe7w8TZAjBnBBLLknerq0DvN86SfA6QaXOl/nOfgcMfCx3YtJnX9u2Yi/k=" 
); 
步驟5: 模擬遠程HTTP協議請求支付寶(調用AlipaySubmit類中的getHttpResponsePOST函數),得到支付寶的處理結果,字符串文本格式。 
res_data=wftFwWhcSfy%2Bjowl544yEn1taSiLPbtgKcLqaLYDeJ9DFMvQXPJGO3tE%2FJzsCQsnSv5i%2FhJHTggXJpVBhmP1gwTQiBv32UsO5cFcFagQfdxet5axkmfsRmGwIaOD2eMJ4dXK%2FyHXkEgE1mxhjgBj5xtbZoZQJssSL%2F7ppYhIlGrU3Mabt0tdKoY6l3B2t0JUqHKYq4b8xCFx9AEDjA2lSrJ%2BZYcVlVJWZBbQPJmWkB5RYHp9Shfj302qxFpwxsI%2FVX2jZq1AXyQMnKBjj57xXtV5r4OZnH%2BxbXMBPnJsNnQ6NpTgjXdDU05eAo4NGiC7bHTcEZJRkJKE54oyn3jKNw%3D%3D&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088501624560335&req_id=201306140001&sign=Bdzmfbs2YONm7aO67zu%2FERNJa1hm8zYd3TVFCzXrsGrafc%2BS4svEk8TRFyOpLpF5SUI639j4uiOrObrSfYLr6EeVj8bMpDZhwdFqgr4O8CFCtZN6dvbbmBPy7LpXbP8mLplQNfJQTeagbGAa49X33cibM376yqLLsogAx%2FowTs4%3D&v=2.0 
步驟6: 對該結果做URLDECODE解碼工作(調用urldecode函數)。 
res_data=wftFwWhcSfy+jowl544yEn1taSiLPbtgKcLqaLYDeJ9DFMvQXPJGO3tE/JzsCQsnSv5i/hJHTggXJpVBhmP1gwTQiBv32UsO5cFcFagQfdxet5axkmfsRmGwIaOD2eMJ4dXK/yHXkEgE1mxhjgBj5xtbZoZQJssSL/7ppYhIlGrU3Mabt0tdKoY6l3B2t0JUqHKYq4b8xCFx9AEDjA2lSrJ+ZYcVlVJWZBbQPJmWkB5RYHp9Shfj302qxFpwxsI/VX2jZq1AXyQMnKBjj57xXtV5r4OZnH+xbXMBPnJsNnQ6NpTgjXdDU05eAo4NGiC7bHTcEZJRkJKE54oyn3jKNw==&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088501624560335&req_id=201306140001&sign=Bdzmfbs2YONm7aO67zu/ERNJa1hm8zYd3TVFCzXrsGrafc+S4svEk8TRFyOpLpF5SUI639j4uiOrObrSfYLr6EeVj8bMpDZhwdFqgr4O8CFCtZN6dvbbmBPy7LpXbP8mLplQNfJQTeagbGAa49X33cibM376yqLLsogAx/owTs4=&v=2.0 
步驟7: 對這串結果字符串做字符串切割,獲取返回參數的信息。其中,如果簽名方式設置的是0001(RSA),那么還需要對這結果中的返回參數res_data做解密工作;如果簽名方式設置的是MD5,則結果中的返回參數res_data直接顯示明文。 
res_data= <?xml version="1.0" encoding="utf-8"?><direct_trade_create_res><request_token>20130614039a363773d04690f4196e888bf7b1ff</request_token></direct_trade_create_res>&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088501624560335&req_id=201306140001&sign=Bdzmfbs2YONm7aO67zu/ERNJa1hm8zYd3TVFCzXrsGrafc+S4svEk8TRFyOpLpF5SUI639j4uiOrObrSfYLr6EeVj8bMpDZhwdFqgr4O8CFCtZN6dvbbmBPy7LpXbP8mLplQNfJQTeagbGAa49X33cibM376yqLLsogAx/owTs4=&v=2.0
接著把XML結構的res_data的值做XML解析,從中獲取子節點request_token的值(這一系列過程需調用AlipaySubmit類中的parseResponse函數),這個值就是授權令牌。 
20130614039a363773d04690f4196e888bf7b1ff 
步驟8:商戶為手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)的請求參數配置好數據后,與步驟一、二、三、四同理,把數據組裝進數組$parameter中。 
$parameter = array( 
"service" => "alipay.wap.auth.authAndExecute", 
"partner" => "2088501624560335", 
"sec_id" => "0001", 
"format" => "xml", 
"v" =>"2.0", 
"req_id" => "201306140001", 
"req_data"=> "<auth_and_execute_req><request_token>20130614039a363773d04690f4196e888bf7b1ff</request_token></auth_and_execute_req>", 
"_input_charset" => "utf-8" 
); 
對該數組做空值過濾(調用AlipaySubmit類中的paraFilter函數),對該數組做參數名首字母升序的排序動作(調用AlipaySubmit類中的argSort函數),把待簽名數組轉變成待簽名字符串,對該字符串做簽名(調用AlipaySubmit類中的buildRequestMysign函數),把簽名結果賦值給參數sign,并把sign加入之前的待簽名數組中,此時得到的便是要請求給支付寶的全部數據。 
$parameter = array( 
"_input_charset"=> "utf-8", 
"format" => "xml", 
"partner" => "2088501624560335", 
"req_data"=> "<auth_and_execute_req><request_token>20130614039a363773d04690f4196e888bf7b1ff</request_token></auth_and_execute_req>", 
"req_id" => "201306140001", 
"sec_id" => "0001", 
"service" => "alipay.wap.auth.authAndExecute", 
"v" => "2.0", 
"sign" => "vtkY9FLWCzJSlpxiNicV85FAGSTacoV7X5k2zLLPAMfMJZPlk6FpJ2/s94g0R0AcEHZyvOp8D4qhR/p1TMRuqw5Hr86LeTeyR52d9VK1NDKrBRSzw6rXG8R6LqUJkkv1i095z1a5VeJW2G46MjQkDAY+AIDWbUx1XCSAaiyx4X4=" 
);
步驟9: 以GET方式,請求支付寶(調用AlipaySubmit類中的buildRequestForm函數),此時商戶的頁面會自動跳轉至支付寶收銀臺。
 
圖5-3 跳轉至支付寶收銀臺
后面的動作全由買家在支付寶收銀臺中操作完成。
步驟10: 當這筆交易被買家支付成功后支付寶收銀臺上顯示該筆交易成功,并提示用戶可返回商戶網站。買家點擊該功能按鈕后,則當前界面會跳轉回商戶設置的call_back_url頁面文件去,如果長時間沒有點擊,則當前支付寶收銀臺界面會自動跳轉至商戶call_back_url頁面文件去。此時商戶的call_back_url頁面會收到一串帶有處理結果數據的鏈接地址。 
http://127.0.0.1:8800/WS_WAP_PAYWAP-PHP-UTF-8/call_back_url.php?out_trade_no=cs201306140001&request_token=requestToken&result=success&trade_no=2013061435574635&sign=UmQGu7GQ6lQuisaK9FhQjl1UO3K%2BEt%2BXDsbdnuHuex38I1ssnsrTlADpCFHWfeezZs4%2FW5knSMo%2Fmg2DheSRSLj4%2FOTJRUtcnAJmiwmeK%2Bj9icN8vz5pcAXlXiFrwb9oTj8gLCOeY3GLXRmCVHTUW9UD89ZI9IraxsxCHgXQZaQ%3D&sign_type=0001 
步驟11: 用GET方式獲得這些返回數據,與步驟一、二、三、四同理,對數組$_GET做空值過濾、參數名首字母升序的排序、待簽名數組轉變成待簽名字符串。 
out_trade_no=cs201306140001&request_token=requestToken&result=success&trade_no=2013061435574635 
對該字符串做簽名驗證(這一系列動作為調用AlipayNotify類中的verifyReturn函數完成),得到布爾類型的驗證結果,完成call_back_url頁面文件的驗證動作。 
步驟12: 買家對一筆交易付款完成的同時,除了支付寶會觸發頁面跳轉至call_back_url文件的同步通知動作,還會自動觸發服務器異步通知頁面文件(商戶設置參數notify_url的值)。此時,商戶的notify_url文件也會收到支付寶異步通知回來的數據。 
{service=alipay.wap.trade.create.direct, sign=MK1Q0vAATXdJTiBOxCh3XLulQDJgvYD7tU3doIpYuZEf/JCMi6MubmanJbJ9TdSbGK3iM7anDxwdflM9DVaPuc7ZdqS0Xp4N+YGUXzlcm3al2lcAMjh7ttAsPy4cia4kKWJo0ATZZeIP8jkZG2L46nBeElqo3ZcbeMQklFhu6ak=, sec_id=0001, v=1.0, notify_data=wd2ALy4RTeR2xvoSUsphr98A2Ctm2rbOvhG/T8+U2vD0xTTwHf5sGsmRV+s33SLZIZQ/dJyUxIvmkrvpPDWsT1T+qRWc6MVT32Na/5JdQyyE89e6bhJHmQk+OjyCF68XdsCDa0cw8QtA5ScFfeIcV6ryXCw61uwtgBEebMDL0d8j9IWUYs1nnLdW1HNfRo8AUH6hEQpbz3pboMxVLZcXcFTKReb1NuIfe5Df0x9tfeU1pnN+JewkUFsqQP9jMZD7PWjfjX+Lml1st9ftHfhzZ+w/s116i1oW8MONEkwStQkT2yVBGmCpLw0IZeS/LZth1eyM2oUfDMOA1aK7zeuP8ICdU2TjMNOahkBipBdgLpjQgaAW/xaO5LKirg6Au7IRtHeKBf1haXcQ3LNkgc3HttbmATjJaMQM535CGaaXK7zFsHZCB3k1uk3I1PJ2tVX2Uy+xkSZP/h20/IxHlSdj8xXDe74g2XYtBbsVd8Qmd7gf8YNwQk+WYtMsAbHCzugE0MvxTwyyG1XoGyCRHYe7u2oudsQGzbrAyrGuMHpnv3Ku09up2sjcn0h5zAOUDCslcJwCa2qYd1y4KOZqtXqiPFUQ2yRuUMluvWQCOr0ckAGlVhUV93Mu1CXU8PdqTQPNGZPpb7AEDyCYWhpt/CWlz0def7o1GhWbC19Z3NMdvfDvoyaL//77cUjjqKVYQ9EeDdRnKujj0AzSV8gLgK4rmmf1zHiYOpfXflyghxWc3O/i8tlF7ruKbS7pSvcyBvzgmW0zojZnattdoKiIRNZAeZ+v4cqDKkBpMtlrKJc7yL7nYOEdXiTaVQ/3iFpZm0J+U3pOewsYbX6Vmkvb5wTYHJzNQFu6E1QyYjiibRSospNgRRlzHXXAUgL7nK0JR8PKhen4ID1ZVRtL+r0RzGnPiMvSyt4fAbkP06nKikuZBeTD9isLY793XG6lj4PCTAHWZE4DzZAXoEppAdCqd810kpav9OrbShFpEhKvDcsDxTRixwjTxsaTv+N4DObYuJThoR6SR1qmiQNArmgx3glNUbZdYQ4i5zdLU5B8v02idAwRFWEbH8oBzyKxlwslOeEwq0+WisDvxJCAtPpWeZvWL0v/u6MOPkAFoN9Ml4dLIOFcrSaifblfaCVXajS7QjcvS2YLuLzQUjjb2R0H0ZnSCVjS+FgiXhTWrEr/8VB8VsMcOZ6Vz+ZrcT5wjWpP/Il19q8g0xB260B4x5O1xocMjTertociASRirLkg2jYH4EcUMN/fFZRLTVJuFZQ6rVLpsK+eHzgyIrS2Fz/YZORdSet6zaFzERzEhrWSrL6mJ878vl4b92CGoy6op7m7B/GBsrvEwizCPR039ZaDsMahg==} 
步驟13: 用POST方式獲得這些返回數據,如果簽名方式設置的是0001(RSA)時,需要先對這些數據中的參數notify_data做解密;如果簽名方式設置的是MD5,因為直接返回明文,所以不需要解密。 
{service=alipay.wap.trade.create.direct, sign=MK1Q0vAATXdJTiBOxCh3XLulQDJgvYD7tU3doIpYuZEf/JCMi6MubmanJbJ9TdSbGK3iM7anDxwdflM9DVaPuc7ZdqS0Xp4N+YGUXzlcm3al2lcAMjh7ttAsPy4cia4kKWJo0ATZZeIP8jkZG2L46nBeElqo3ZcbeMQklFhu6ak=, sec_id=0001, v=1.0, notify_data=<notify><payment_type>1</payment_type><subject>測試</subject><trade_no>2013061435574635</trade_no><buyer_email>xxxxxxx@xx.com</buyer_email><gmt_create>2013-06-14 17:38:45</gmt_create><notify_type>trade_status_sync</notify_type><quantity>1</quantity><out_trade_no>cs201306140001</out_trade_no><notify_time>2013-06-14 17:38:54</notify_time><seller_id>2088501624560335</seller_id><trade_status>TRADE_FINISHED</trade_status><is_total_fee_adjust>N</is_total_fee_adjust><total_fee>0.01</total_fee><gmt_payment>2013-06-14 17:38:54</gmt_payment><seller_email>alipayrisk10@alipay.com</seller_email><gmt_close>2013-06-14 17:38:54</gmt_close><price>0.01</price><buyer_id>2088002396712354</buyer_id><notify_id>be3e931aa1cc2147d7fa5b6bf569b6153y</notify_id><use_coupon>N</use_coupon></notify>} 
notify_url異步通知的簽名驗證規律與call_back_url不同,商戶只需要順序獲取支付寶的返回數據,不需要對這些參數排序。因此,直接把數組$_POST轉變成待簽名字符串。 
service=alipay.wap.trade.create.direct&v=1.0&sec_id=0001&notify_data=<notify><payment_type>1</payment_type><subject>測試</subject><trade_no>2013061435574635</trade_no><buyer_email>xxxxxxx@xx.com</buyer_email><gmt_create>2013-06-14 17:38:45</gmt_create><notify_type>trade_status_sync</notify_type><quantity>1</quantity><out_trade_no>cs201306140001</out_trade_no><notify_time>2013-06-14 17:38:54</notify_time><seller_id>2088501624560335</seller_id><trade_status>TRADE_FINISHED</trade_status><is_total_fee_adjust>N</is_total_fee_adjust><total_fee>0.01</total_fee><gmt_payment>2013-06-14 17:38:54</gmt_payment><seller_email>alipayrisk10@alipay.com</seller_email><gmt_close>2013-06-14 17:38:54</gmt_close><price>0.01</price><buyer_id>2088002396712354</buyer_id><notify_id>be3e931aa1cc2147d7fa5b6bf569b6153y</notify_id><use_coupon>N</use_coupon></notify> 
接著對該字符串做簽名驗證(這一系列動作調用AlipayNotify類中的verifyNotify函數),得到布爾類型的驗證結果,完成notify_url頁面文件的驗證動作。 
步驟14: 在notify_url頁面文件中,參數notify_data是XML結構的字符串,需要先XML解析,再獲取需要的子節點數據。
3. ASP.NET(C#) 
步驟1:商戶為手機網頁即時到賬授權接口(alipay.wap.trade.create.direct)的請求參數配置好數據后,組裝進數組sParaTempToken中,再對該數組做空值過濾(調用AlipayCore類中的FilterPara函數)。 
{[partner, 2088101568358171]} 
{[_input_charset, utf-8]} 
{[sec_id, 0001]} 
{[service, alipay.wap.trade.create.direct]} 
{[format, xml]} 
{[v, 2.0]} 
{[req_id, 201306170002]} 
{[req_data, <direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-CSHARP/notify_url.aspx</notify_url><call_back_url>http://127.0.0.1:48034/WS_WAP_PAYWAP-CSHARP/call_back_url.aspx</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306170002</out_trade_no><subject>測試</subject><total_fee>0.01</total_fee></direct_trade_create_req>]} 
步驟2: 對該數組做參數名首字母升序的排序動作(調用AlipayCore類中的SortPara函數),排序規則請參見“3 技術接入規則”中的“請求時簽名邏輯”,此時得到的數組為待簽名數組。 
{[_input_charset, utf-8]} 
{[format, xml]} 
{[partner, 2088101568358171]} 
{[req_data, <direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-CSHARP/notify_url.aspx</notify_url><call_back_url>http://127.0.0.1:48034/WS_WAP_PAYWAP-CSHARP/call_back_url.aspx</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306170002</out_trade_no><subject>測試
</subject><total_fee>0.01</total_fee></direct_trade_create_req>]} 
{[req_id, 201306170002]} 
{[sec_id, 0001]} 
{[service, alipay.wap.trade.create.direct]} 
{[v, 2.0]} 
步驟3: 把待簽名數組轉變成待簽名字符串。 
_input_charset=utf-8&format=xml&partner=2088101568358171&req_data=<direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-CSHARP/notify_url.aspx</notify_url><call_back_url>http://127.0.0.1:48034/WS_WAP_PAYWAP-CSHARP/call_back_url.aspx</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306170002</out_trade_no><subject>測試</subject><total_fee>0.01</total_fee></direct_trade_create_req>&req_id=201306170002&sec_id=0001&service=alipay.wap.trade.create.direct&v=2.0 
并對該字符串做簽名(調用AlipaySubmit類中的BuildRequestMysign函數),轉變規則請參見“3 技術接入規則”中的“請求時簽名邏輯”。 
xO/eAP4pFusEveZmaw2mgCEoQGxDqkFZ+AF8wI1U52OGASs48O/efTZLn9Cr0tF9tDJQ+hwlcNj+F4/Hx+w6v35c0oE3F1Eab/Z2wKAirIYVh/HagumS34aa6t7lJb21YFIshu1YgoqWfwakQ/fzdcwVncW7jJQIvMsIgAhEJ8I= 
步驟4: 把簽名結果賦值給參數sign,并把sign加入之前的待簽名數組中,此時得到的便是要請求給支付寶的全部數據。 
{[_input_charset, utf-8]} 
{[format, xml]} 
{[partner, 2088101568358171]} 
{[req_data, <direct_trade_create_req><notify_url>http://www.xxx.com/WS_WAP_PAYWAP-CSHARP/notify_url.aspx</notify_url><call_back_url>http://127.0.0.1:48034/WS_WAP_PAYWAP-CSHARP/call_back_url.aspx</call_back_url><seller_account_name>alipayrisk10@alipay.com</seller_account_name><out_trade_no>cs201306170002</out_trade_no><subject>測試</subject><total_fee>0.01</total_fee></direct_trade_create_req>]} 
{[req_id, 201306170002]} 
{[sec_id, 0001]} 
{[service, alipay.wap.trade.create.direct]} 
{[v, 2.0]} 
{[sign, xO/eAP4pFusEveZmaw2mgCEoQGxDqkFZ+AF8wI1U52OGASs48O/efTZLn9Cr0tF9tDJQ+hwlcNj+F4/Hx+w6v35c0oE3F1Eab/Z2wKAirIYVh/HagumS34aa6t7lJb21YFIshu1YgoqWfwakQ/fzdcwVncW7jJQIvMsIgAhEJ8I=]}
步驟5: 模擬遠程HTTP協議請求支付寶(調用AlipaySubmit類中的BuildRequest(string GATEWAY_NEW, Dictionary<string, string> sParaTemp)函數),得到支付寶的處理結果,字符串文本格式。 
res_data=KzTV7n3JHKMmaxc9jObz8FqT9PO8MQw5kqX8uqO4fGwvNIDHNngLdEig%2FaN4A97i0nRviLzoutVSojBIM%2BRECev5UR6aqhME%2Bei%2BX8LYf9sZaE1V3o2oMz3BnubFOcnozWBgXyDaA2fzeU1YxT9TL4BLaDEJ0gZB5upjpMeiyO%2Bil9068gl11ojNbJE3jeGtgqp%2FXTSXmFZ0x7DYefB1XYWmzETLywMkKdwlhnYIDrTLHLj4wdMTmsQS%2BxbTD2egERafRFD3DtPDkO6j7pRfHcJBtoEtC%2Fg4Zj2FD58ADEGLKb7oAkMU6ado091la%2FvAzH3gZtElHAs%2BdYglI%2FUIBw%3D%3D&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088101568358171&req_id=201306170002&sign=oo4ShGc1fndnYiI2OJzclNSQcfspEzoQchrYS8fhiaAzddE31ra%2Ffq7xOm9RCzDTfgyO3Sl8pUcAWY%2B4BYPrxMF5GPVv2IZDY%2FN%2FxQjTwEPrkQYazOtimzB1qRTA%2FUrOrEejEyMUqN2XXrMwl4%2FavdFjPpBAsCsF7KFJOL%2FB7H4%3D&v=2.0 
步驟6: 對該結果做URLDECODE解碼工作(調用urldecode函數)。 
res_data=KzTV7n3JHKMmaxc9jObz8FqT9PO8MQw5kqX8uqO4fGwvNIDHNngLdEig/aN4A97i0nRviLzoutVSojBIM+RECev5UR6aqhME+ei+X8LYf9sZaE1V3o2oMz3BnubFOcnozWBgXyDaA2fzeU1YxT9TL4BLaDEJ0gZB5upjpMeiyO+il9068gl11ojNbJE3jeGtgqp/XTSXmFZ0x7DYefB1XYWmzETLywMkKdwlhnYIDrTLHLj4wdMTmsQS+xbTD2egERafRFD3DtPDkO6j7pRfHcJBtoEtC/g4Zj2FD58ADEGLKb7oAkMU6ado091la/vAzH3gZtElHAs+dYglI/UIBw==&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088101568358171&req_id=201306170002&sign=oo4ShGc1fndnYiI2OJzclNSQcfspEzoQchrYS8fhiaAzddE31ra/fq7xOm9RCzDTfgyO3Sl8pUcAWY+4BYPrxMF5GPVv2IZDY/N/xQjTwEPrkQYazOtimzB1qRTA/UrOrEejEyMUqN2XXrMwl4/avdFjPpBAsCsF7KFJOL/B7H4=&v=2.0 
步驟7: 對這串結果字符串做字符串切割,獲取返回參數的信息。其中,如果簽名方式設置的是0001(RSA),那么還需要對這結果中的返回參數res_data做解密工作;如果簽名方式設置的MD5,則結果中的返回參數res_data直接顯示明文。 
res_data=<?xml version="1.0" encoding="utf-8"?><direct_trade_create_res><request_token>201306179d4c458a00e26aca863b4dac3cc2bfd3</request_token></direct_trade_create_res>&service=alipay.wap.trade.create.direct&sec_id=0001&partner=2088101568358171&req_id=201306170002&sign=oo4ShGc1fndnYiI2OJzclNSQcfspEzoQchrYS8fhiaAzddE31ra/fq7xOm9RCzDTfgyO3Sl8pUcAWY+4BYPrxMF5GPVv2IZDY/N/xQjTwEPrkQYazOtimzB1qRTA/UrOrEejEyMUqN2XXrMwl4/avdFjPpBAsCsF7KFJOL/B7H4=&v=2.0 
接著把XML結構的res_data的值做XML解析,從中獲取子節點request_token的值(這一系列過程需調用AlipaySubmit類中的ParseResponse函數),這個值就是授權令牌。 
201306179d4c458a00e26aca863b4dac3cc2bfd3
步驟8: 商戶為手機網頁即時到賬交易接口(alipay.wap.auth.authandexecute)的請求參數配置好數據后,與步驟一、二、三、四同理,把數據組裝進數組sParaTemp中。 
{[partner, 2088101568358171]} 
{[_input_charset, utf-8]} 
{[sec_id, 0001]} 
{[service, alipay.wap.auth.authAndExecute]} 
{[format, xml]} 
{[v, 2.0]} 
{[req_data, <auth_and_execute_req><request_token>201306179d4c458a00e26aca863b4dac3cc2bfd3</request_token></auth_and_execute_req>]} 
對該數組做空值過濾(調用AlipaySubmit類中的FilterPara函數),對該數組做參數名首字母升序的排序動作(調用AlipaySubmit類中的SortPara函數),把待簽名數組轉變成待簽名字符串,對該字符串做簽名(調用AlipaySubmit類中的BuildRequestMysign函數),把簽名結果賦值給參數sign,并把sign加入之前的待簽名數組中,此時得到的便是要請求給支付寶的全部數據。 
{[_input_charset, utf-8]} 
{[format, xml]} 
{[partner, 2088101568358171]} 
{[req_data, <auth_and_execute_req><request_token>201306179d4c458a00e26aca863b4dac3cc2bfd3</request_token></auth_and_execute_req>]} 
{[sec_id, 0001]} 
{[service, alipay.wap.auth.authAndExecute]} 
{[v, 2.0]} 
{[sign, yB+DrSNb0zvnpzgzid7h/J45V0xbNsOSr7q0/qpX4jElmSCDxUl6ouwc3T39XwCy1nwil/SGx0PiwjN1AKHy+4zADjQVmDMCR28b9skLrVM/Gw5cU35FEgvlTIK+UZ85t/5m4KVby9CIqeI+B6ziXM4zQUxsNTU7AjRGi/kU3Es=]} 
步驟9: 以GET方式,請求支付寶(調用AlipaySubmit類中的BuildRequest(string GATEWAY_NEW, Dictionary<string, string> sParaTemp, string strMethod, string strButtonValue)函數),此時商戶的頁面會自動跳轉至支付寶收銀臺。
 
圖5-4 跳轉至支付寶收銀臺
后面的動作全由買家在支付寶收銀臺中操作完成。 
步驟10: 當這筆交易被買家支付成功后支付寶收銀臺上顯示該筆交易成功,并提示用戶可返回商戶網站。買家點擊該功能按鈕后,則當前界面會跳轉回商戶設置的call_back_url頁面文件去,如果長時間沒有點擊,則當前支付寶收銀臺界面會自動跳轉至商戶call_back_url頁面文件去。此時商戶的call_back_url頁面會收到一串帶有處理結果數據的鏈接地址。
http://127.0.0.1:48034/WS_WAP_PAYWAP-CSHARP/call_back_url.aspx?out_trade_no=cs201306170002&request_token=requestToken&result=success&trade_no=2013061742035035&sign=vnXVWq91w87tmKdrtePYKnEJZmVhuUMeVCVv18HwU8ABmvKH48CLXRQjjAdU4y75WtR62HhEoNCLAnTkx1hxsVGOZwpSRx9DxdXwz1m1NozIOV%2BTN8V9l%2FQXEJj0dmlgd3UjHdxfAbMkFKFDznIfZwYSbhCAL2H4KwXdefLAGiw%3D&sign_type=0001 
步驟11: 用GET方式獲得這些返回數據,與步驟一、二、三、四同理,對數組sPara(調用call_back_url頁面中的GetRequestGet()函數)做空值過濾、參數名首字母升序的排序、待簽名數組轉變成待簽名字符串。 
out_trade_no=cs201306170002&request_token=requestToken&result=success&trade_no=2013061742035035 
對該字符串做簽名驗證(這一系列動作為調用AlipayNotify類中的VerifyReturn函數完成),得到布爾類型的驗證結果,完成call_back_url頁面文件的驗證動作。 
步驟12: 買家對一筆交易付款完成的同時,除了支付寶會觸發頁面跳轉至call_back_url文件的同步通知動作,還會自動觸發服務器異步通知頁面文件(商戶設置參數notify_url的值)。此時,商戶的notify_url文件也會收到支付寶異步通知回來的數據。 
{service=alipay.wap.trade.create.direct, sign=eUHFymt6/MSGNDX8XcnD44IRKEXkx3mG5dk9hp39LYqmwO/WWf9+mldyljSkEXTo9wA2p8Tv9CR1NCTy9nMjHg19KWX8Rtrz2CIfoOvTsE8ttxaRzkQ8TBo/K3sHPERJmQZE2uW8RyXywMaRbRMC+90YATDqex6e7FCR0HQt4KI=, sec_id=0001, v=1.0, notify_data=iUtYE4ipOb+hpmw+lU1lDaLvTxusiNwV6LKDn6vSJLY5Pl2HaE9O9sqWfYXeh+oos6cOS3bB5fkmDqJeDUXHH5oJFttkIosZAj1W0QjROcpF3/j4fx+15DsbGMwXfF4qeBAGA2PdAlwpdZK+krJeAyNn7jNUc2STWVS7ZBRBs0SV8meE1TrjQf5zcQMmoBhLRot6/9iiZyoeBYh2s4JA2u+1HakCLEFproN288teBwA6X/apKe+AauHCYnrUMSO8Wjhz7vaQlkWkQ7tq5rcT6kPGkmwhWvhVylDYXB51SD0KI/17qHm4z8hWiXzArl22P1r6TwP87WBmnAudPfAM5Jj0Uq1UeCE2LpG+8Z2IzKPe1OTLJhtcrjza3q/vFj/J1lT1pq2PM9eDs9p0aV3KuCH3+1Ms7oMqq8IjeJdExYFIa002NxCTkc7VWyMnwHWYCSGC+vPUR9KeZKtWvMpHpJRIJegXiF2LWRU0XrXfwnguiOpWVmSW3XGemedxRsIG0AOyNSLAfq+9Wqvcbz6lcwzskDcLwwOHo2Qo9sRWB7wEytcJwGstXHbXLXR3GXvIkogD7slYd3mvqsczeTPCJ7KeftQP0yGi6gb3wM7igDkIc2tvvdrwQqg7SBjOOU1mUwZbMXYb4ErlFNELHw+5/Tu/qlQcaSma/WWiOL1z0yj1HnfF/PhdWJ/ohlDCMg5iwPW4Xa1gJx+SEGz/lr9ZFbSvCIzzVFgXN+v+26kNb/VvM4dqfSUoj722AOv0fvkNA7qS0EZ7j0gv2L5IZMjibK7DwQ/SLgiQf9sALPWkSBoJfBdZ4k5vJXry4p3Uh2BHUeDckQzNaB3oQJVT8X+6h+8hpvZS5KpDRrq57odJEWqcWQ3tEozyANqL2XTea3tH3h9Fi3ZqmhNTazvdRMGXHLaOhMIg6kmo84aYbPMapv/5fyQdXrELZLiuZh9oxLTECqrHN1kx8BLSLp4ubpkent7NV2LgJbA+jZhE7pUH2vnND4b6XNpOOSha+3y6/kLCjj6cnxUhnwjUUdCCfzXTK1j1+RCS1+G89SR+f7q1NQy/LPK4qD/FVAmquCFMsDzwKNPfNJdxadiElAezivEP4q7ihjH2iNKm/7WJouYfWfYTYXAepa5OIZodJP1otQu1uheDmm1COKnUw9PW6rOQkNK41Weiej0fWqTLi19Fe9YbWagVXf4qJ74RhxLhoWso2JdQV3OPNjCXa5EXn8mRGsB8yQKtwZvZTgtjMB+BMcEa6Qqb74G3mFifyB1+ZCdGIBijK0eMPzyskyqdQG15wC152F5A2BnImIObQ4MgFFqY0gbjM1xzUcb/mhQ196sPP+Mv+25uw4CcJE+5FQW6ONx343MEcs8P+esaRlY2CH4uXiUBtjltzlcD3kpC4RobNzuCMb/NLROkx+mLKZJeID1SgBa1Shj7OzYqVYyyUEpdPfgLEgwFsCtBl3Tsf05yW19acFX2+fYQXk+/k5gs/pkCt2ol27Z4bcGDEOP4zPCd5KrHyvguyUDXWepc48} 
步驟13: 用POST方式獲得這些返回數據,如果簽名方式設置的是0001(RSA)時,需要先對這些數據中的參數notify_data做解密;如果簽名方式設置的是MD5,因為直接返回明文,所以不需要解密。
{service=alipay.wap.trade.create.direct, sign=eUHFymt6/MSGNDX8XcnD44IRKEXkx3mG5dk9hp39LYqmwO/WWf9+mldyljSkEXTo9wA2p8Tv9CR1NCTy9nMjHg19KWX8Rtrz2CIfoOvTsE8ttxaRzkQ8TBo/K3sHPERJmQZE2uW8RyXywMaRbRMC+90YATDqex6e7FCR0HQt4KI=, sec_id=0001, v=1.0, notify_data=<notify><partner>2088101568358171</partner><payment_type>8</payment_type><subject>測試</subject><trade_no>2013061742035035</trade_no><buyer_email>xxxxxxx@xx.com</buyer_email><gmt_create>2013-06-17 20:12:35</gmt_create><notify_type>trade_status_sync</notify_type><quantity>1</quantity><out_trade_no>cs201306170002</out_trade_no><notify_time>2013-06-17 20:12:40</notify_time><seller_id>2088501624560335</seller_id><out_channel_type>BALANCE</out_channel_type><trade_status>TRADE_SUCCESS</trade_status><is_total_fee_adjust>N</is_total_fee_adjust><total_fee>0.01</total_fee><gmt_payment>2013-06-17 20:12:40</gmt_payment><seller_email>alipayrisk10@alipay.com</seller_email><price>0.01</price><buyer_id>2088002396712354</buyer_id><out_channel_amount>0.01</out_channel_amount><notify_id>c6936b49aa4422d63bf14bc507c535983y</notify_id><use_coupon>N</use_coupon></notify>} 
notify_url異步通知的簽名驗證規律與call_back_url不同,商戶只需要順序獲取支付寶的返回數據,不需要對這些參數排序。因此,直接把數組sPara(調用notify_url頁面中的GetRequestPost()函數)轉變成待簽名字符串。 
service=alipay.wap.trade.create.direct&v=1.0&sec_id=0001&notify_data=<notify><partner>2088101568358171</partner><payment_type>8</payment_type><subject>測試</subject><trade_no>2013061742035035</trade_no><buyer_email>xxxxxxx@xx.com</buyer_email><gmt_create>2013-06-17 20:12:35</gmt_create><notify_type>trade_status_sync</notify_type><quantity>1</quantity><out_trade_no>cs201306170002</out_trade_no><notify_time>2013-06-17 20:12:40</notify_time><seller_id>2088501624560335</seller_id><out_channel_type>BALANCE</out_channel_type><trade_status>TRADE_SUCCESS</trade_status><is_total_fee_adjust>N</is_total_fee_adjust><total_fee>0.01</total_fee><gmt_payment>2013-06-17 20:12:40</gmt_payment><seller_email>alipayrisk10@alipay.com</seller_email><price>0.01</price><buyer_id>2088002396712354</buyer_id><out_channel_amount>0.01</out_channel_amount><notify_id>c6936b49aa4422d63bf14bc507c535983y</notify_id><use_coupon>N</use_coupon></notify> 
接著對該字符串做簽名驗證(這一系列動作調用AlipayNotify類中的VerifyNotify函數),得到布爾類型的驗證結果,完成notify_url頁面文件的驗證動作。 
步驟14: 在notify_url頁面文件中,參數notify_data是XML結構的字符串,需要先XML解析,再獲取需要的子節點數據。 
 
6 Testing flow rules
Table 6-1 testing flow rules
 
Steps Debugging contents Notes
Step 1: debug this interface independently on this computer 正常獲取授權令牌 
模擬手機瀏覽器進行付款
頁面跳轉同步返回 Only configure the interface well. It shall not be put into the website project of the commercial user. 
Step 2: debug this interface independently on the server 正常獲取授權令牌 
模擬手機瀏覽器進行付款
頁面跳轉同步返回 
服務器異步通知返回 Put into the server debugging after debugging this computer without error.  
Step 3: interface is integrated to website project - Make the connection and integration between the debugged interfaces and the business flows of commercial users’ website project.
Step4: debug the integrated website project on this computer The whole business operation flow
模擬手機瀏覽器進行付款
頁面跳轉同步返回 
Subsequent execution of business Debug the interfaces integrated to the website project on this computer 
Step 5: debug the integrated website project The whole business operation flow
使用手機瀏覽器進行付款
頁面跳轉同步返回 
服務器異步通知返回
Subsequent execution of business After the debugging on this computer is faultless, then put into server for debugging.
 
7 附錄
7.1 如何獲得PID與密鑰 
步驟1: 使用簽約支付寶賬號登錄“商家服務”平臺中的“我的商家服務”(https://b.alipay.com/order/serviceIndex.htm)。 
 
圖7-1 我的商家服務
步驟2: 在地址欄中輸入https://mobiless.alipay.com/myproduct/my_order.htm,即可查看到簽約支付寶賬號、合作者身份ID(PID)的信息。
 
圖7-2 查看簽約支付寶賬號等信息
步驟3: 點擊<密鑰管理>按鈕,輸入“支付密碼”,點擊“確認”,即可查看到各類型的私鑰。 
 
圖7-3 查看私鑰
步驟4: 上傳RSA類型的商戶公鑰,獲得支付寶公鑰。
 
圖7-4獲取支付寶公鑰
步驟5: 保存支付寶賬號、合作者身份ID(PID)、交易安全校驗碼(MD5)、交易安全校驗碼(RSA)中的支付寶公鑰。 
7.2 RSA密鑰生成與使用 
7.2.1 生成商戶密鑰 
1. 打開openssl密鑰生成軟件 
打開openssl文件夾下的bin文件夾,執行openssl.exe文件,如下圖:
 
圖7-5 執行openssl.exe文件
2. 生成RSA私鑰 
輸入“genrsa -out rsa_private_key.pem 1024”命令,回車后,在當前bin文件目錄中會新增一個rsa_private_key.pem文件,其文件為原始的商戶私鑰(請妥善保存該文件,PHP開發語言中需要使用該文件),以下為命令正確執行截圖:
 
圖7-6 生成RSA私鑰
3. 生成RSA公鑰 
輸入“rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem”命令回車后,在當前bin文件目錄中會新增一個rsa_public_key.pem文件,其文件為原始的商戶公鑰(請妥善保存該文件,PHP開發語言中需要使用該文件),以下為命令正確執行截圖:
 
圖7-7 生成RSA公鑰 
4. 生成PKCS8編碼的私鑰 
輸入命令“pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt”并回車,當前界面中會直接顯示出生成結果:
 
圖7-8 生成PKCS8編碼的私鑰
右鍵點擊openssl窗口上邊邊緣,選擇“編輯→標記”,選中要復制的文字:
 
圖7-9 選中要復制的文字 
此時繼續右鍵點擊openssl窗口上邊邊緣,選擇“編輯→復制”,把復制的內容粘貼進一個新的記事本中,可隨意命名,只要知道這個是PKCS8格式的私鑰即可(請妥善保存該文件)。 
7.2.2 RSA密鑰使用邏輯 
RSA密鑰使用邏輯: 
商戶在使用RSA簽名方式的支付寶接口時,真正會用到的密鑰是商戶私鑰與支付寶公鑰。商戶上傳公鑰給支付寶,支付寶把公鑰給商戶,是公鑰互換的操作。這就使得商戶使用自己的私鑰做簽名時,支付寶端會根據商戶上傳的公鑰做驗證簽名。商戶使用支付寶公鑰做驗證簽名時,同理,也是因為支付寶用支付寶私鑰做了簽名。 
1. PHP開發語言使用方法 
key文件夾里面須存放.pem后綴名的商戶私鑰、支付寶公鑰兩個文件。 
商戶的私鑰 
– 必須保證只有一行文字,即:沒有回車、換行、空格等; 
– 不需要對剛生成的(原始的)私鑰做pkcs8編碼;
– 不需要去掉去掉“-----BEGIN PUBLIC KEY-----”、“-----END PUBLIC KEY-----”;
– 簡言之,只要維持剛生成出來的私鑰的內容即可。 
支付寶公鑰 
(1) 先用簽約支付寶賬號登錄支付寶網站,再瀏覽器訪問“https://ms.alipay.com/index.htm”,點擊菜單欄“我的商家服務”,右側點擊“密鑰管理”進入密鑰管理頁面,復制“交易安全校驗碼(RSA)”→“支付寶公鑰”欄目下的整串信息到一個新的記事本中,命名為“alipay_public_key.txt”; 
(2) 去掉這串字符串中的回車、換行、空格,變成只有一行文字; 
(3) 在這串支付寶公鑰字符串的頭尾部分,分別增加“-----BEGIN PUBLIC KEY-----”、“-----END PUBLIC KEY-----”這兩條文字; 
(4) 切割這串支付寶公鑰字符串,切割后的格式與商戶剛生成的公鑰格式一致即可,如下圖:
 
圖7-10 支付寶公鑰示意圖
(5) 保存該記事本,并改變后綴名為.pem。 
2. JAVA和ASP.NET(C#)開發語言使用方法 
商戶的私鑰 
– 必須保證只有一行文字,即:沒有回車、換行、空格等;
– 需對剛生成的(原始的)私鑰做pkcs8編碼;
– 編碼完成后,復制該段私鑰,并去掉該段里面的回車、換行、空格、“-----BEGIN RSA PRIVATE KEY-----”、“-----END RSA PRIVATE KEY-----”。 
支付寶公鑰
(1) 先用簽約支付寶賬號登錄支付寶網站,再瀏覽器訪問“https://ms.alipay.com/index.htm”,點擊菜單欄“我的商家服務”,右側點擊“密鑰管理”進入密鑰管理頁面,復制“交易安全校驗碼(RSA)”→“支付寶公鑰”欄目下的整串信息;
(2) 去掉這串字符串中的回車、換行、空格,必須保證只有一行文字。 
7.3 業務數據傳遞 
支付寶提供的業務參數為支付寶需要商戶傳遞過來的數據要求。商戶只需要根據自己的業務需求,在業務邏輯代碼運行時把這些動態數據以賦值給變量的形式,再通過支付寶接口本身的接口邏輯,傳遞給支付寶系統,讓支付寶系統可識別。 
舉例說明,商戶要把某筆訂單的數據傳遞給支付寶。那么商戶需要先根據支付寶的參數要求,從自己的下單系統中拿到付款總金額(total_fee)、商戶的訂單號(out_trade_no)、訂單名稱(subject)等數據,再把這些數據一個一個以值的形式賦給對應的變量。再通過代碼邏輯,把變量組合及加工成一次可以發送給支付寶的請求。 
7.4 如何增加擴展業務參數 
注意: 
本章節以代碼示例為例,來說明如何增加擴展業務參數,僅供參考。商戶需要根據自身情況來編寫擴展業務參數的代碼。 
打開配置業務參數的頁面文件,找到代碼修改位置。 
1. JAVA修改流程 
alipayapi.jsp文件,在參數req_dataToken中的根節點<direct_trade_create_req>下新增子節點。舉例,新增一個參數merchant_url,那么修改前后比較如下: 
修改前: 
String req_dataToken = "<direct_trade_create_req><notify_url>" + notify_url + "</notify_url><call_back_url>" + call_back_url + "</call_back_url><seller_account_name>" + seller_email + "</seller_account_name><out_trade_no>" + out_trade_no + "</out_trade_no><subject>" + subject + "</subject><total_fee>" + total_fee + "</total_fee></direct_trade_create_req>"; 
修改后: 
String req_dataToken = "<direct_trade_create_req><notify_url>" + notify_url + "</notify_url><call_back_url>" + call_back_url + 
"</call_back_url><seller_account_name>" + seller_email + "</seller_account_name><out_trade_no>" + out_trade_no + "</out_trade_no><subject>" + subject + "</subject><total_fee>" + total_fee + "</total_fee><merchant_url>" + merchant_url + "</merchant_url></direct_trade_create_req>"; 
merchant_url為新增的業務參數變量,需商戶為其賦值。 
2. PHP修改流程 
alipayapi.php文件,在參數$req_data中的根節點<direct_trade_create_req>下新增子節點。舉例,新增一個參數merchant_url,那么修改前后比較如下: 
修改前: 
$req_data = '<direct_trade_create_req><notify_url>' . $notify_url . '</notify_url><call_back_url>' . $call_back_url . '</call_back_url><seller_account_name>' . $seller_email . '</seller_account_name><out_trade_no>' . $out_trade_no . '</out_trade_no><subject>' . $subject . '</subject><total_fee>' . $total_fee . '</total_fee></direct_trade_create_req>'; 
修改后: 
$req_data = '<direct_trade_create_req><notify_url>' . $notify_url . '</notify_url><call_back_url>' . $call_back_url . '</call_back_url><seller_account_name>' . $seller_email . '</seller_account_name><out_trade_no>' . $out_trade_no . '</out_trade_no><subject>' . $subject . '</subject><total_fee>' . $total_fee . '</total_fee><merchant_url>'.$merchant_url.'</merchant_url></direct_trade_create_req>'; 
$merchant_url為新增的業務參數變量,需商戶為其賦值。 
3. ASP.NET(C#)修改流程 
default.aspx.cs文件,在參數req_dataToken中的根節點<direct_trade_create_req>下新增子節點。舉例,新增一個參數merchant_url,那么修改前后比較如下: 
修改前: 
string req_dataToken = "<direct_trade_create_req><notify_url>" + notify_url + "</notify_url><call_back_url>" + call_back_url + "</call_back_url><seller_account_name>" + seller_email + "</seller_account_name><out_trade_no>" + out_trade_no + "</out_trade_no><subject>" + subject + "</subject><total_fee>" + total_fee + "</total_fee></direct_trade_create_req>"; 
修改后: 
string req_dataToken = "<direct_trade_create_req><notify_url>" + notify_url + "</notify_url><call_back_url>" + call_back_url +
"</call_back_url><seller_account_name>" + seller_email + "</seller_account_name><out_trade_no>" + out_trade_no + "</out_trade_no><subject>" + subject + "</subject><total_fee>" + total_fee + "</total_fee><merchant_url>" + merchant_url + "</merchant_url></direct_trade_create_req>"; 
merchant_url為新增的業務參數變量,需商戶為其賦值。 
7.5 如何更新訂單 
在交易過程中,不僅需要實現能夠讓買家成功付款,而且還需要商戶網站的訂單數據與支付寶的交易管理中的交易信息保持一致。 
要使信息保持一致,就需要商戶網站的程序開發、維護或管理的技術人員根據商戶網站的業務流程做訂單更新的程序開發。 
訂單更新的業務程序代碼放置位置 
參數notify_url對應的頁面文件、參數return_url對應的頁面文件,注釋指定的位置。 
訂單更新的頁面文件如何被調用 
前提:參數notify_url、參數return_url有被正確設置。 
– 當買家付款完成時,當前界面會自動跳轉到參數return_url對應的頁面文件,此時return_url對應的頁面文件則被啟動; 
– 當該筆交易在支付寶交易管理中存在且交易狀態改變時,支付寶會主動發送通知到參數notify_url對應的頁面文件,此時參數notify_url對應的頁面文件則被啟動。 
如何能獲得支付寶處理完成后的通知返回數據 
通知返回數據的參數詳見技術文檔通知返回參數列表。 
– 參數return_url對應的頁面文件中獲取參數方式是GET方式獲取,如:request.querrystring("參數名")、$_GET['參數名'] 
– 參數notify_url對應的頁面文件中獲取參數方式是POST方式獲取,如:request.form("參數名")、$_POST['參數名'] 
訂單更新基本思想
通過代碼示例中的驗證之后,獲取支付寶反饋數據,先根據這筆交易找到商戶網站訂單系統中對應的訂單,再判斷該筆訂單是否已經做過處理,如果未做處理,那么按照商戶網站的業務流程更新訂單數據。
世聯翻譯-讓世界自由溝通!專業的全球語言翻譯供應商,上海翻譯公司專業品牌。絲路沿線56種語言一站式翻譯與技術解決方案,專業英語翻譯、日語翻譯等文檔翻譯、同傳口譯、視頻翻譯、出國外派服務,加速您的全球交付。 世聯翻譯公司在北京、上海、深圳等國際交往城市設有翻譯基地,業務覆蓋全國城市。每天有近百萬字節的信息和貿易通過世聯走向全球!積累了大量政商用戶數據,翻譯人才庫數據,多語種語料庫大數據。世聯品牌和服務品質已得到政務防務和國際組織、跨國公司和大中型企業等近萬用戶的認可。