- 翻譯公司資訊
-
世聯(lián)翻譯公司如何電子系統“網(wǎng)頁(yè)支付接入與使用規則 ”中文翻譯
發(fā)布時(shí)間:2019-08-28 16:09 點(diǎn)擊:
世聯(lián)翻譯公司如何電子系統“網(wǎng)頁(yè)支付接入與使用規則 ”中文翻譯
手機網(wǎng)頁(yè)支付接入與使用規則手機網(wǎng)頁(yè)即時(shí)到賬授權接口(alipay.wap.trade.create.direct)手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)附錄文檔版本號:1.0Alipay (China) Internet Technology Ltd. All right reserved手機網(wǎng)頁(yè)即時(shí)到賬接口附錄文檔1 Document Description1.1 Document Description本文檔是《手機網(wǎng)頁(yè)即時(shí)到賬接口》附錄文檔,它詳細解釋了在技術(shù)接入與使用過(guò)程中需要注意的地方,以幫助商戶(hù)避免風(fēng)險產(chǎn)生。Please contact the related technology support if you have any questions after reading.1.2 Business termsTable 1-1 Business TermsTerms DescriptionDemand The process of transmitting the data requiring for delivery to theReturn 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 liabilityAll 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 (手機網(wǎng)頁(yè)即時(shí)到賬接口.pdf), example codes, and the access and using rules of this file(手機網(wǎng)頁(yè)支付接入與使用規則.pdf). Otherwise, they caused risks, assets loss or expanded cases shall be shouldered by the commercial users.3 Technology access rulesTable 3-1 Technological access rulesTypes Details ReasonsAccount 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、商戶(hù)的公私秘鑰、支付寶公鑰的隱私性 Prevent the signed account information being stolen, loss in capital and despitefully utilized by others測試完畢后,要把測試賬號立刻更換成簽約賬號。 使用測試賬號時(shí),手續費按照3%扣除。Safety 商戶(hù)必須以DNS解析的方式訪(fǎng)問(wèn)支付寶接口,不要設置DNS cache,不要綁定支付寶IP。如果為了商戶(hù)自身安全必須綁定支付寶IP時(shí),必須向支付寶的技術(shù)支持人員備案。 Once the IP address changes, the commercial address cannot request or access Alipay so that commercial user business cannot be used directly.組成 手機網(wǎng)頁(yè)支付產(chǎn)品由手機網(wǎng)頁(yè)即時(shí)到賬授權接口(alipay.wap.trade.create.direct)、手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)兩個(gè)接口組成。 使用時(shí)少了其中任何一個(gè)接口,都無(wú)法正常使用該產(chǎn)品。必須先調用手機網(wǎng)頁(yè)即時(shí)到賬授權接口(alipay.wap.trade.create.direct)獲得授權令牌,再調用手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)完成付款。 手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)依賴(lài)授權令牌(request_token)才能完成付款,而該授權令牌需要通過(guò)手機網(wǎng)頁(yè)即時(shí)到賬授權接口(alipay.wap.trade.create.direct)獲取。請求時(shí)簽名邏輯 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 interfaceAmong 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 interfaceIt is mandatory to configure as per the format of all parameters in the request parameter list. Avoid abnormal using of interfaceIt 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,即本產(chǎn)品不支持GBK編碼格式。 避免報異常錯誤,如:簽名不正確。seller_email是收款時(shí)的支付寶賬號,需要與partner對應的支付寶賬號為同一個(gè),也就是說(shuō)收款支付寶賬號必須是簽約時(shí)的支付寶賬號。 避免簽約支付寶賬號出現資金受損的可能簽名方式僅支持RSA、MD5兩種。如果要使用RSA簽名時(shí),簽名方式要設置成0001。 避免簽名不成功參數req_data中節點(diǎn)信息都須按照XML節點(diǎn)格式設置,無(wú)順序要求。不可空的節點(diǎn)信息必須設置?煽盏墓濣c(diǎn)支持不設置,也支持設置了但是空值。 如果設置不符合XML格式或不可空節點(diǎn)信息設置疏漏,請求時(shí)不會(huì )報錯,但是返回時(shí)支付寶會(huì )提示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.發(fā)送給支付寶的請求,請求參數不僅包含參與簽名的參數,還包含參數sign。 避免報異常錯誤,如:簽名不正確。發(fā)送給支付寶的請求,如果使用form表單傳輸,需要按照以下要求編寫(xiě):action的值必須為“http://wappaygw.alipay.com/service/rest.htm?_input_charset=該值”,如: http://wappaygw.alipay.com/service/rest.htm?_input_charset=utf-8。 不允許寫(xiě)成完整的請求鏈接地址,即禁止http://wappaygw.alipay.com/service/rest.htm?后帶有所有要請求給支付寶的請求參數數據;<form>與</form>之間需包含所有要請求給支付寶的參數,且每個(gè)參數的格式為<input type="hidden" name="參數名" value="參數值" />;在眾多請求參數中,請求參數_input_charset(編碼格式)必須存在于form表單中,即form表單中必須含有<input type="hidden" name="_input_charset" value="參數值">;<form>與</form>之間包含的數據只允許是要請求給支付寶的參數,禁止出現商戶(hù)自行命名,不在接口技術(shù)文檔請求參數列表中的其他數據;form表單的method屬性,可自行選擇get、post兩種。但是,手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)只支持get方式傳輸。避免請求支付寶時(shí)報錯,錯誤碼為簽名不正確;手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)如果用POST提交,頁(yè)面顯示會(huì )為空白。 專(zhuān)業(yè)翻譯公司Data transmission It is a mandatory to us https protocol. Avoid abnormal using of interface 專(zhuān)業(yè)翻譯公司在手機網(wǎng)頁(yè)即時(shí)到賬授權接口(alipay.wap.trade.create.direct)中,建議使用模擬遠程傳輸方式提交信息及獲取返回信息。并且,提交方式僅支持POST。 避免報異常錯誤(如:簽名不正確),得不到授權令牌。在手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)中,提交方式僅支持GET。 如果用POST提交,頁(yè)面顯示會(huì )為空白。Notifying returning verification 在手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)頁(yè)面跳轉同步通知中,在對通知的參數做簽名時(shí),這些參數必須來(lái)源于支付寶通知回來(lái)的參數,并且除去列表中的參數sign,先對這些參數根據“參數名=參數值”的格式,由字母a到z的順序進(jìn)行排序,再依照“參數名1=參數值1&參數名2=參數值2&…&參數名N=參數值N”的規則進(jìn)行拼接,得到的簽名結果與獲取到的參數sign值做比較。 驗證返回的簽名在手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)服務(wù)器異步通知中,需要XML解析明文狀態(tài)下的參數notify_data,獲得節點(diǎn)notify_id的值。 避免無(wú)法正常獲得通知ID(notify_id),導致校驗是否是支付寶發(fā)送的驗證失敗。在手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)服務(wù)器異步通知中,如果有設置服務(wù)器異步通知路徑,則必須使用獲取到的參數notify_id再次請求支付寶,獲取是否是支付寶發(fā)送的驗證結果。該請求鏈接是:https://mapi.alipay.com/gateway.do?partner=合作者身份ID¬ify_id=通知ID的值。 驗證是否是支付寶發(fā)來(lái)的請求在手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)服務(wù)器異步通知中,對明文狀態(tài)下的服務(wù)器異步通知參數(除去參數sign)不需要先排序,而是直接依照通知返回的參數順序,以“參數名1=參數值1&參數名2=參數值2&…&參數名N=參數值N”的規則進(jìn)行拼接,從而得到待簽名字符串。 避免驗證簽名不正確返回數據處理 支付寶主動(dòng)發(fā)送通知,當商戶(hù)接收到通知數據后必須給支付寶返回“success”字符串,不允許返回其他多余字符。 如果商戶(hù)返回給支付寶的信息不是“success”,支付寶最多重復發(fā)送7次通知。必須保證設置的通知路徑互聯(lián)網(wǎng)上能訪(fǎng)問(wèn)得到,且訪(fǎng)問(wèn)順暢。 避免接收不到支付寶發(fā)送的通知在手機網(wǎng)頁(yè)即時(shí)到賬授權接口(alipay.wap.trade.create.direct)中,需要先對獲得的返回數據做解碼(URLDECODE),再對這些數據做字符串切割,獲得參數res_data的值。此時(shí),如果該接口設置的簽名方式sec_id是0001(RSA),還需要對參數res_data做RSA解密,簽名方式sec_id是MD5時(shí)不需要該步驟。最后對變成明文的參數res_data的值做XML解析,獲得授權令牌request_token。 返回數據是一串編碼過(guò)的字符串。需要對字符串做解碼(URLDECODE)、切割、RSA解密、XML解析等步驟。其中任何一步出現問(wèn)題,則無(wú)法獲得授權令牌request_token。在手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)頁(yè)面跳轉同步通知中,可直接用GET方式獲得返回數據。 頁(yè)面跳轉同步通知以純URL帶參數的模式返回信息在手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)服務(wù)器異步通知中: 如果簽名方式sec_id設置的是0001(RSA),則需要先對參數notify_data做RSA解密獲得明文; 如果簽名方式sec_id設置的是MD5,則不需要解密。當簽名方式是0001(RSA)時(shí),參數notify_data是密文狀態(tài),需要解密。在手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)服務(wù)器異步通知中,如果要獲得需要的信息,還需要對參數notify_data做XML解析獲得子節點(diǎn)信息。 參數notify_data是XML格式的字符串必須對返回的數據進(jìn)行處理。 以便商戶(hù)能夠了解接口的使用情況,以及進(jìn)行商戶(hù)的后續業(yè)務(wù)操作。在服務(wù)器異步通知頁(yè)面文件中,需保證商戶(hù)的所有業(yè)務(wù)全部運行完成,才能執行打印success的動(dòng)作。 避免異步通知不正常,如收不到通知或業(yè)務(wù)處理沒(méi)有完成卻告訴支付寶系統已經(jīng)處理完成。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 interfaceError code processing 請求出錯啦 例如seller_account_name不是郵箱格式、請求參數缺失等請求參數不符合設置規則。為保障用戶(hù)賬戶(hù)安全,禁止非手機訪(fǎng)問(wèn)。 該筆交易不是在真實(shí)手機上創(chuàng )建或執行的。該類(lèi)情況一般出現在商戶(hù)測試階段,通過(guò)pc瀏覽器來(lái)請求支付寶時(shí)報錯。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 interface4 Interface access rulesTable 4-1 Interface using rulesType Standardization Reasons使用時(shí) 對同一筆還沒(méi)創(chuàng )建支付寶交易的商戶(hù)訂單,支持重復調用手機網(wǎng)頁(yè)即時(shí)到賬授權接口(alipay.wap.trade.create.direct),但每一次的req_id值必須保證唯一。 每次請求req_id的值須保證唯一對同一筆還沒(méi)創(chuàng )建支付寶交易的商戶(hù)訂單,支持重復調用手機網(wǎng)頁(yè)即時(shí)到賬授權接口(alipay.wap.trade.create.direct),且每次返回的授權令牌都有效,有效時(shí)間為24小時(shí)。 當支付寶系統中還沒(méi)有為商戶(hù)的某筆訂單創(chuàng )建支付寶交易時(shí),商戶(hù)方可以對該筆訂單重復調用手機網(wǎng)頁(yè)即時(shí)到賬授權接口(alipay.wap.trade.create.direct),但每次返回的授權令牌不會(huì )相同。手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)支持重復調用,前提是交易基本信息(買(mǎi)家、賣(mài)家、交易金額、超時(shí)時(shí)間、商品名稱(chēng)等)在多次調用中保持一致,且交易尚未完成支付。 防止支付失敗手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)重復調用時(shí),也支持同一個(gè)token(授權令牌)重復調用,但需要保證該token(授權令牌)對應的交易的買(mǎi)家尚未確定,即該筆交易還未在支付寶中創(chuàng )建。 避免報“買(mǎi)家不符”的錯誤填寫(xiě)買(mǎi)家支付寶賬號時(shí),不能與賣(mài)家的支付寶賬號相同。 避免報錯,如錯誤碼:創(chuàng )建交易失敗。客戶(hù)端內嵌webview方式實(shí)現,需要開(kāi)啟js以及css設置。 避免出現因內嵌引起的兼容性或者界面布局異常、亂碼等問(wèn)題。在請求參數中不能存在影響請求格式的特殊字符,如:url、xml格式的特殊字符等。 避免交易失敗建議商戶(hù)的業(yè)務(wù)判斷依據以notify_url(服務(wù)器異步通知)為準,call_back_url頁(yè)面文件只做界面展示用途。 避免商戶(hù)訂單數據與支付寶交易數據不同步本接口支持的眾多支付通道中,儲蓄卡支付和信用卡支付一旦進(jìn)入手機網(wǎng)銀系統頁(yè)面,支付寶將無(wú)法控制訂單的支付效率問(wèn)題。 各網(wǎng)銀系統的運作及各網(wǎng)銀與支付寶間的交互因為網(wǎng)絡(luò )或其他因素導致支付時(shí)的速度快慢不一業(yè)務(wù)應用注意事項 支付寶支付手續費扣取模式分為兩種: 實(shí)時(shí)扣費模式:一般都是收款賬戶(hù)扣費,或采用合同指定固定扣款支付寶賬戶(hù)扣費; 月結手續費模式:實(shí)時(shí)交易不扣手續費,月底賬單統一結算。實(shí)時(shí)扣費時(shí),在扣費支付寶賬號的賬務(wù)明細中可馬上查到扣費記錄;但月結模式下,則不會(huì )查到。在集成接口的過(guò)程中,如果商戶(hù)使用seller_email作為收款賬戶(hù),則當需要修改該支付寶賬戶(hù)名稱(chēng)時(shí),商戶(hù)必須在程序中做相應修改。 避免支付過(guò)程中會(huì )出現賣(mài)家賬戶(hù)不存在的錯誤測試時(shí) 調試階段時(shí),建議使用1分錢(qián)(0.01元)進(jìn)行測試 降低測試成本Network Guarantee network smooth 防止支付時(shí)或支付完成后的訂單同步出現各類(lèi)異常5 集成流程詳解5.1 接入準備1. 確認是否已開(kāi)通手機網(wǎng)頁(yè)支付功能使用簽約支付寶賬號登錄https://b.alipay.com/order/serviceIndex.htm,訂單狀態(tài)為“已完結”表示手機網(wǎng)頁(yè)支付權限已開(kāi)通,如下圖所示。圖5-1 查詢(xún)訂單狀態(tài)如果無(wú)法確認,建議聯(lián)系與支付寶簽約協(xié)議時(shí)的貴公司業(yè)務(wù)人員。2. 確認簽約支付寶賬號集成時(shí)需要使用簽約的支付寶賬號相關(guān)信息,包括:支付寶登錄賬號、合作者身份ID(PID)、交易安全校驗碼(KEY)。獲得方法請參見(jiàn)“7.1 如何獲得PID與密鑰”。3. 確認網(wǎng)站的開(kāi)發(fā)語(yǔ)言開(kāi)發(fā)語(yǔ)言是用指定的一種語(yǔ)言來(lái)開(kāi)發(fā)網(wǎng)站。支付寶提供的代碼示例目前包含PHP、ASP.NET、JAVA三種。4. 確認網(wǎng)站編碼格式查詢(xún)網(wǎng)站使用的是何種編碼格式,可通過(guò)在網(wǎng)站網(wǎng)頁(yè)上點(diǎn)擊右鍵,找到“編碼”,打開(kāi)擴展箭頭后查看,默認選中的編碼即為網(wǎng)站的編碼格式。支付寶提供的代碼示例目前僅包含UTF-8一種。5. 確認網(wǎng)站簽名方式簽名方式指的是對字符串做加密與解密時(shí)的方法。支付寶提供的代碼示例目前包含RSA、MD5兩種。6. 確認開(kāi)發(fā)環(huán)境 本機電腦調試環(huán)境各開(kāi)發(fā)語(yǔ)言對應的開(kāi)發(fā)環(huán)境、調試工具等。 服務(wù)器調試環(huán)境– 服務(wù)器需要支持各開(kāi)發(fā)語(yǔ)言對應的環(huán)境,如:支持PHP開(kāi)發(fā)語(yǔ)言的SSL服務(wù)、CURL服務(wù)等。– 能夠把本地文件上傳到服務(wù)器上的通道與權限,如:FTP,SFTP傳輸。5.2 集成5.2.1 接口代碼示例配置運行解壓下載到的接口資料壓縮文件(文件名是WS_WAP_PAYWAP.zip),根據商戶(hù)自身情況選擇JAVA(文件夾名為WS_WAP_PAYWAP-JAVA-UTF-8)、PHP(文件夾名為WS_WAP_PAYWAP-PHP-UTF-8)、C#(文件夾名為WS_WAP_PAYWAP-CSHARP-UTF-8)三種開(kāi)發(fā)語(yǔ)言代碼示例文件夾中的一個(gè)。1. JAVA配置流程(以eclipse為例)步驟1: 導入代碼啟動(dòng)JAVA開(kāi)發(fā)軟件,把“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”全部導入到開(kāi)發(fā)環(huán)境中。“src\com”文件夾中的文件是類(lèi)文件,無(wú)法與支付寶PC端的其他接口混用。步驟2: 配置基本信息在JAVA開(kāi)發(fā)環(huán)境中,打開(kāi)“src\com\alipay\config”類(lèi)目下“AlipayConfig.java”文件,配置partner(合作身份者ID)、key(交易安全校驗碼)、private_key(商戶(hù)私鑰)、public_key(支付寶公鑰)、sign_type(簽名類(lèi)型)等基本信息參數。表5-1 JAVA基本信息配置參數 含義partner 合作身份者ID,以2088開(kāi)頭由16位純數字組成的字符串。請參考“7.1 如何獲得PID與密鑰”。key 交易安全檢驗碼,由數字和字母組成的32位字符串。當sign_type設置為MD5時(shí),該參數設置才有效。請參考“7.1 如何獲得PID與密鑰”。private_key 商戶(hù)方的私鑰。當sign_type設置為0001時(shí),該參數設置才有效。請參考“7.2 RSA密鑰生成與使用”。public_key 支付寶的公鑰。當sign_type設置為0001時(shí),該參數設置才有效。請參考“7.2 RSA密鑰生成與使用”。sign_type 簽名方式。在手機網(wǎng)頁(yè)支付的接口中僅支持兩種簽名方式,MD5和RSA。對該參數設置的值分別是MD5、0001。input_charset 字符編碼格式。在手機網(wǎng)頁(yè)支付的接口中僅支持utf-8。無(wú)需修改。步驟3: 配置業(yè)務(wù)信息打開(kāi)“alipayapi.jsp”文件。配置req_id(請求號)、notify_url(服務(wù)器異步通知頁(yè)面路徑)、call_back_url(頁(yè)面跳轉同步通知頁(yè)面路徑)、seller_email(賣(mài)家支付寶帳戶(hù))、out_trade_no(商戶(hù)訂單號)、subject(訂單名稱(chēng))、total_fee(付款金額)這幾個(gè)常用業(yè)務(wù)參數信息。請參考“7.3 業(yè)務(wù)數據傳遞”和“7.4 如何增加擴展業(yè)務(wù)參數”。步驟4: 編寫(xiě)同步通知業(yè)務(wù)邏輯打開(kāi)“call_back_url.jsp”文件。在注釋指定位置“//請在這里加上商戶(hù)的業(yè)務(wù)邏輯程序代碼”寫(xiě)入商戶(hù)的業(yè)務(wù)邏輯代碼。請參考“7.5 如何更新訂單”。步驟5: 編寫(xiě)異步通知業(yè)務(wù)邏輯打開(kāi)“notify_url.jsp”文件(notify_url.jsp需保證無(wú)任何HTML代碼)。在注釋指定位置“//請在這里加上商戶(hù)的業(yè)務(wù)邏輯程序代碼”寫(xiě)入商戶(hù)的業(yè)務(wù)邏輯代碼。請參考“7.5 如何更新訂單”。需要注意的是,簽名方式為0001時(shí),需要先解密,MD5時(shí)則不需要。解密后,需要XML解析方可獲取參數信息。2. PHP配置流程步驟1: 導入代碼啟動(dòng)PHP開(kāi)發(fā)軟件,把“WS_WAP_PAYWAP-PHP-UTF-8”文件夾中除去“readme.txt”與“openssl”文件夾外的其他所有文件全部導入到開(kāi)發(fā)環(huán)境中。“lib”文件夾中的文件是類(lèi)文件,無(wú)法與支付寶PC端的其他接口混用。步驟2: 配置基本信息在PHP開(kāi)發(fā)環(huán)境中,打開(kāi)“alipay.config.php”文件,配置partner(合作身份者ID)、key(交易安全校驗碼)、private_key(商戶(hù)私鑰)、public_key(支付寶公鑰)、sign_type(簽名類(lèi)型)等基本信息參數。表5-2 PHP基本信息配置參數 解釋partner 合作身份者ID,以2088開(kāi)頭由16位純數字組成的字符串。請參考“7.1 如何獲得PID與密鑰”。key 交易安全檢驗碼,由數字和字母組成的32位字符串。當sign_type設置為MD5時(shí),該參數設置才有效。請參考“7.1 如何獲得PID與密鑰”。private_key 商戶(hù)方的私鑰。當sign_type設置為0001時(shí),該參數設置才有效。請參考“7.2 RSA密鑰生成與使用”。public_key 支付寶的公鑰。當sign_type設置為0001時(shí),該參數設置才有效。請參考“7.2 RSA密鑰生成與使用”。sign_type 簽名方式。在手機網(wǎng)頁(yè)支付的接口中僅支持兩種簽名方式,MD5和RSA。對該參數設置的值分別是MD5、0001。input_charset 字符編碼格式。在手機網(wǎng)頁(yè)支付的接口中僅支持utf-8。無(wú)需修改。cacert ca證書(shū)路徑地址,用于curl中ssl校驗。需要保證cacert.pem文件在當前文件夾目錄中。無(wú)需修改。transport 訪(fǎng)問(wèn)模式,根據自己的服務(wù)器是否支持ssl訪(fǎng)問(wèn),若支持請選擇https;若不支持請選擇http。該參數只關(guān)聯(lián)到同步通知或異步通知時(shí),驗證是否是支付寶發(fā)來(lái)的請求功能中的支付寶請求地址。無(wú)需修改。步驟3: 配置業(yè)務(wù)信息打開(kāi)“alipayapi.php”文件。配置req_id(請求號)、notify_url(服務(wù)器異步通知頁(yè)面路徑)、call_back_url(頁(yè)面跳轉同步通知頁(yè)面路徑)、seller_email(賣(mài)家支付寶帳戶(hù))、out_trade_no(商戶(hù)訂單號)、subject(訂單名稱(chēng))、total_fee(付款金額)這幾個(gè)常用業(yè)務(wù)參數信息。請參考“7.3 業(yè)務(wù)數據傳遞”和“7.4 如何增加擴展業(yè)務(wù)參數”。步驟4: 編寫(xiě)同步通知業(yè)務(wù)邏輯打開(kāi)“call_back_url.php”文件。在注釋指定位置“//請在這里加上商戶(hù)的業(yè)務(wù)邏輯程序代碼”寫(xiě)入商戶(hù)的業(yè)務(wù)邏輯代碼。請參考“7.5 如何更新訂單”。步驟5: 編寫(xiě)異步通知業(yè)務(wù)邏輯打開(kāi)“notify_url.php”文件(notify_url.php需保證無(wú)任何HTML代碼)。在注釋指定位置“//請在這里加上商戶(hù)的業(yè)務(wù)邏輯程序代碼”寫(xiě)入商戶(hù)的業(yè)務(wù)邏輯代碼。請參考“7.5 如何更新訂單”。需要注意的是,簽名方式為0001時(shí),需要先解密,MD5時(shí)則不需要。解密后,需要XML解析方可獲取參數信息。3. ASP.NET(C#)配置流程步驟1: 導入代碼啟動(dòng).NET開(kāi)發(fā)軟件,把“WS_WAP_PAYWAP-CSHARP-UTF-8”文件夾中除去“readme.txt”與“Web.Config”外的其他所有文件全部導入到開(kāi)發(fā)環(huán)境中。為防止占用“default.aspx”的名稱(chēng),可以把“default.aspx”與“default.aspx.cs”兩個(gè)文件中的核心代碼拷貝到新頁(yè)面文件中去。“app_code”文件夾中的文件是類(lèi)文件,無(wú)法與支付寶PC端的其他接口混用。步驟2: 配置基本信息在.NET開(kāi)發(fā)環(huán)境中,打開(kāi)“app_code”類(lèi)目下的“AlipayConfig.cs”文件,配置partner(合作身份者ID)、key(交易安全校驗碼)、private_key(商戶(hù)私鑰)、public_key(支付寶公鑰)、sign_type(簽名類(lèi)型)等基本信息參數。表5-3 ASP.NET(C#)基本信息配置參數 解釋partner 合作身份者ID,以2088開(kāi)頭由16位純數字組成的字符串。請參考“7.1 如何獲得PID與密鑰”。key 交易安全檢驗碼,由數字和字母組成的32位字符串。當sign_type設置為MD5時(shí),該參數設置才有效。請參考“7.1 如何獲得PID與密鑰”。private_key 商戶(hù)方的私鑰。當sign_type設置為0001時(shí),該參數設置才有效。請參考“7.2 RSA密鑰生成與使用”。public_key 支付寶的公鑰。當sign_type設置為0001時(shí),該參數設置才有效。請參考“7.2 RSA密鑰生成與使用”。sign_type 簽名方式。在手機網(wǎng)頁(yè)支付的接口中僅支持兩種簽名方式,MD5和RSA。對該參數設置的值分別是MD5、0001。input_charset 字符編碼格式。在手機網(wǎng)頁(yè)支付的接口中僅支持utf-8。無(wú)需修改。步驟3: 配置業(yè)務(wù)信息打開(kāi)“default.aspx.cs”文件。配置req_id(請求號)、notify_url(服務(wù)器異步通知頁(yè)面路徑)、call_back_url(頁(yè)面跳轉同步通知頁(yè)面路徑)、seller_email(賣(mài)家支付寶帳戶(hù))、out_trade_no(商戶(hù)訂單號)、subject(訂單名稱(chēng))、total_fee(付款金額)這幾個(gè)常用業(yè)務(wù)參數信息。請參考“7.3 業(yè)務(wù)數據傳遞”和“7.4 如何增加擴展業(yè)務(wù)參數”。步驟4: 編寫(xiě)同步通知業(yè)務(wù)邏輯打開(kāi)“call_back_url.aspx”、“call_back_url.aspx.cs”文件。call_back_url.aspx為前端頁(yè)面可顯示一些信息供用戶(hù)查看,call_back_url.aspx.cs為后臺業(yè)務(wù)代碼編寫(xiě)處。在注釋指定位置“//請在這里加上商戶(hù)的業(yè)務(wù)邏輯程序代碼”寫(xiě)入商戶(hù)的業(yè)務(wù)邏輯代碼。請參考“7.5 如何更新訂單”。步驟5: 編寫(xiě)異步通知業(yè)務(wù)邏輯打開(kāi)“notify_url.aspx.cs”文件。notify_url.aspx需保證無(wú)任何HTML代碼,notify_url.aspx.cs為后臺業(yè)務(wù)代碼編寫(xiě)處。在注釋指定位置“//請在這里加上商戶(hù)的業(yè)務(wù)邏輯程序代碼”寫(xiě)入商戶(hù)的業(yè)務(wù)邏輯代碼。請參考“7.5 如何更新訂單”。需要注意的是,簽名方式為0001時(shí),需要先解密,MD5時(shí)則不需要。解密后,需要XML解析方可獲取參數信息。5.2.2 接口代碼示例運行邏輯詳解1. JAVA(以eclipse為例)步驟1: 商戶(hù)為手機網(wǎng)頁(yè)即時(shí)到賬授權接口(alipay.wap.trade.create.direct)的請求參數配置好數據后,組裝進(jìn)數組sParaTempToken中,再對該數組做空值過(guò)濾(調用AlipayCore類(lèi)中的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: 對該數組做參數名首字母升序的排序動(dòng)作,此時(shí)的數組為待簽名數組,并把待簽名數組轉變成待簽名字符串(調用AlipayCore類(lèi)中的createLinkString函數),排序規則請參見(jiàn)“3 技術(shù)接入規則”中的“請求時(shí)簽名邏輯”。_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類(lèi)中的buildRequestMysign函數),規則參見(jiàn)“3 技術(shù)接入規則”中的“請求時(shí)簽名邏輯”。O8DH9HG2yRkbUrIz0jtKaPZRcWqqgcuGEtI6576Yibh60iX7azXTq2D4ZYWaX16kBy8MNSE4PBuPcrxe66kQW/Ufhoa/f+0jeUx5RC3/A0as+/vOOCmQnO0VTyRTp2DHLvcL3k9EKow6FsFuQHZPpHsQnzzRUSlQ+vGI+dPYUSU=步驟4: 把簽名結果賦值給參數sign,并把sign加入之前的待簽名數組中,此時(shí)得到的便是要請求給支付寶的全部數據。{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協(xié)議請求支付寶(調用AlipaySubmit類(lèi)中的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接著(zhù)把XML結構的res_data的值做XML解析,從中獲取子節點(diǎn)request_token的值(這一系列過(guò)程需調用AlipaySubmit類(lèi)中的parseResponse函數),這個(gè)值就是授權令牌。2013061725bc6b978788d6f2459d0af9a49ea2f3步驟8:商戶(hù)為手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)的請求參數配置好數據后,與步驟一、二、三、四同理,把數據組裝進(jìn)數組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}對該數組做空值過(guò)濾(調用AlipayCore類(lèi)中的paraFilter函數),對該數組做參數名首字母升序的排序動(dòng)作,把待簽名數組轉變成待簽名字符串,對該字符串做簽名(調用AlipaySubmit類(lèi)中的buildRequestMysign函數),把簽名結果賦值給參數sign,并把sign加入之前的待簽名數組中,此時(shí)得到的便是要請求給支付寶的全部數據。{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類(lèi)中的buildRequest(String ALIPAY_GATEWAY_NEW, Map<String, String> sParaTemp, String strMethod, String strButtonName)函數),此時(shí)商戶(hù)的頁(yè)面會(huì )自動(dòng)跳轉至支付寶收銀臺。圖5-2 跳轉至支付寶收銀臺后面的動(dòng)作全由買(mǎi)家在支付寶收銀臺中操作完成。步驟10: 當這筆交易被買(mǎi)家支付成功后支付寶收銀臺上顯示該筆交易成功,并提示用戶(hù)可返回商戶(hù)網(wǎng)站。買(mǎi)家點(diǎn)擊該功能按鈕后,則當前界面會(huì )跳轉回商戶(hù)設置的call_back_url頁(yè)面文件去,如果長(cháng)時(shí)間沒(méi)有點(diǎn)擊,則當前支付寶收銀臺界面會(huì )自動(dòng)跳轉至商戶(hù)call_back_url頁(yè)面文件去。此時(shí)商戶(hù)的call_back_url頁(yè)面會(huì )收到一串帶有處理結果數據的鏈接地址。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做空值過(guò)濾、參數名首字母升序的排序、待簽名數組轉變成待簽名字符串。out_trade_no=cs201306170001&request_token=requestToken&result=success&trade_no=2013061741934035對該字符串做簽名驗證(這一系列動(dòng)作為調用AlipayNotify類(lèi)中的verifyReturn函數完成),得到布爾類(lèi)型的驗證結果,完成call_back_url頁(yè)面文件的驗證動(dòng)作。步驟12: 買(mǎi)家對一筆交易付款完成的同時(shí),除了支付寶會(huì )觸發(fā)頁(yè)面跳轉至call_back_url文件的同步通知動(dòng)作,還會(huì )自動(dòng)觸發(fā)服務(wù)器異步通知頁(yè)面文件(商戶(hù)設置參數notify_url的值)。此時(shí),商戶(hù)的notify_url文件也會(huì )收到支付寶異步通知回來(lái)的數據。{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)時(shí),需要先對這些數據中的參數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不同,商戶(hù)只需要順序獲取支付寶的返回數據,不需要對這些參數排序。因此,直接把數組params轉變成待簽名字符串。service=alipay.wap.trade.create.direct&v=1.0&sec_id=0001¬ify_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>接著(zhù)對該字符串做簽名驗證(這一系列動(dòng)作調用AlipayNotify類(lèi)中的verifyNotify函數),得到布爾類(lèi)型的驗證結果,完成notify_url頁(yè)面文件的驗證動(dòng)作。步驟14: 在notify_url頁(yè)面文件中,參數notify_data是XML結構的字符串,需要先XML解析,再獲取需要的子節點(diǎn)數據。2. PHP步驟1: 商戶(hù)為手機網(wǎng)頁(yè)即時(shí)到賬授權接口(alipay.wap.trade.create.direct)的請求參數配置好數據后,組裝進(jìn)數組$para_token中,再對該數組做空值過(guò)濾(調用AlipayCore類(lèi)中的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:對該數組做參數名首字母升序的排序動(dòng)作(調用AlipayCore類(lèi)中的argSort函數)(排序規則請參見(jiàn)“3 技術(shù)接入規則”中的“請求時(shí)簽名邏輯”),此時(shí)得到的數組為待簽名數組。$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類(lèi)中的buildRequestMysign函數),轉變規則請參見(jiàn)“3 技術(shù)接入規則”中的“請求時(shí)簽名邏輯”。EGb8F+aWwBhotwNSQwF9Sik2OzQffV1Val1STvrRj4MzE1W4pLM6Mfjk3/4Vj3ci4Pspcm1OLDHPZ2JQNsFruS6d4bFSQrtEF52irwSF+re42+TBTRe7w8TZAjBnBBLLknerq0DvN86SfA6QaXOl/nOfgcMfCx3YtJnX9u2Yi/k=步驟4:把簽名結果賦值給參數sign,并把sign加入之前的待簽名數組中,此時(shí)得到的便是要請求給支付寶的全部數據。$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協(xié)議請求支付寶(調用AlipaySubmit類(lèi)中的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接著(zhù)把XML結構的res_data的值做XML解析,從中獲取子節點(diǎn)request_token的值(這一系列過(guò)程需調用AlipaySubmit類(lèi)中的parseResponse函數),這個(gè)值就是授權令牌。20130614039a363773d04690f4196e888bf7b1ff步驟8:商戶(hù)為手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)的請求參數配置好數據后,與步驟一、二、三、四同理,把數據組裝進(jìn)數組$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");對該數組做空值過(guò)濾(調用AlipaySubmit類(lèi)中的paraFilter函數),對該數組做參數名首字母升序的排序動(dòng)作(調用AlipaySubmit類(lèi)中的argSort函數),把待簽名數組轉變成待簽名字符串,對該字符串做簽名(調用AlipaySubmit類(lèi)中的buildRequestMysign函數),把簽名結果賦值給參數sign,并把sign加入之前的待簽名數組中,此時(shí)得到的便是要請求給支付寶的全部數據。$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類(lèi)中的buildRequestForm函數),此時(shí)商戶(hù)的頁(yè)面會(huì )自動(dòng)跳轉至支付寶收銀臺。圖5-3 跳轉至支付寶收銀臺后面的動(dòng)作全由買(mǎi)家在支付寶收銀臺中操作完成。步驟10: 當這筆交易被買(mǎi)家支付成功后支付寶收銀臺上顯示該筆交易成功,并提示用戶(hù)可返回商戶(hù)網(wǎng)站。買(mǎi)家點(diǎn)擊該功能按鈕后,則當前界面會(huì )跳轉回商戶(hù)設置的call_back_url頁(yè)面文件去,如果長(cháng)時(shí)間沒(méi)有點(diǎn)擊,則當前支付寶收銀臺界面會(huì )自動(dòng)跳轉至商戶(hù)call_back_url頁(yè)面文件去。此時(shí)商戶(hù)的call_back_url頁(yè)面會(huì )收到一串帶有處理結果數據的鏈接地址。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做空值過(guò)濾、參數名首字母升序的排序、待簽名數組轉變成待簽名字符串。out_trade_no=cs201306140001&request_token=requestToken&result=success&trade_no=2013061435574635對該字符串做簽名驗證(這一系列動(dòng)作為調用AlipayNotify類(lèi)中的verifyReturn函數完成),得到布爾類(lèi)型的驗證結果,完成call_back_url頁(yè)面文件的驗證動(dòng)作。步驟12: 買(mǎi)家對一筆交易付款完成的同時(shí),除了支付寶會(huì )觸發(fā)頁(yè)面跳轉至call_back_url文件的同步通知動(dòng)作,還會(huì )自動(dòng)觸發(fā)服務(wù)器異步通知頁(yè)面文件(商戶(hù)設置參數notify_url的值)。此時(shí),商戶(hù)的notify_url文件也會(huì )收到支付寶異步通知回來(lái)的數據。{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)時(shí),需要先對這些數據中的參數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不同,商戶(hù)只需要順序獲取支付寶的返回數據,不需要對這些參數排序。因此,直接把數組$_POST轉變成待簽名字符串。service=alipay.wap.trade.create.direct&v=1.0&sec_id=0001¬ify_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>接著(zhù)對該字符串做簽名驗證(這一系列動(dòng)作調用AlipayNotify類(lèi)中的verifyNotify函數),得到布爾類(lèi)型的驗證結果,完成notify_url頁(yè)面文件的驗證動(dòng)作。步驟14: 在notify_url頁(yè)面文件中,參數notify_data是XML結構的字符串,需要先XML解析,再獲取需要的子節點(diǎn)數據。3. ASP.NET(C#)步驟1:商戶(hù)為手機網(wǎng)頁(yè)即時(shí)到賬授權接口(alipay.wap.trade.create.direct)的請求參數配置好數據后,組裝進(jìn)數組sParaTempToken中,再對該數組做空值過(guò)濾(調用AlipayCore類(lèi)中的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: 對該數組做參數名首字母升序的排序動(dòng)作(調用AlipayCore類(lèi)中的SortPara函數),排序規則請參見(jiàn)“3 技術(shù)接入規則”中的“請求時(shí)簽名邏輯”,此時(shí)得到的數組為待簽名數組。{[_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類(lèi)中的BuildRequestMysign函數),轉變規則請參見(jiàn)“3 技術(shù)接入規則”中的“請求時(shí)簽名邏輯”。xO/eAP4pFusEveZmaw2mgCEoQGxDqkFZ+AF8wI1U52OGASs48O/efTZLn9Cr0tF9tDJQ+hwlcNj+F4/Hx+w6v35c0oE3F1Eab/Z2wKAirIYVh/HagumS34aa6t7lJb21YFIshu1YgoqWfwakQ/fzdcwVncW7jJQIvMsIgAhEJ8I=步驟4: 把簽名結果賦值給參數sign,并把sign加入之前的待簽名數組中,此時(shí)得到的便是要請求給支付寶的全部數據。{[_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協(xié)議請求支付寶(調用AlipaySubmit類(lèi)中的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接著(zhù)把XML結構的res_data的值做XML解析,從中獲取子節點(diǎn)request_token的值(這一系列過(guò)程需調用AlipaySubmit類(lèi)中的ParseResponse函數),這個(gè)值就是授權令牌。201306179d4c458a00e26aca863b4dac3cc2bfd3步驟8: 商戶(hù)為手機網(wǎng)頁(yè)即時(shí)到賬交易接口(alipay.wap.auth.authandexecute)的請求參數配置好數據后,與步驟一、二、三、四同理,把數據組裝進(jìn)數組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>]}對該數組做空值過(guò)濾(調用AlipaySubmit類(lèi)中的FilterPara函數),對該數組做參數名首字母升序的排序動(dòng)作(調用AlipaySubmit類(lèi)中的SortPara函數),把待簽名數組轉變成待簽名字符串,對該字符串做簽名(調用AlipaySubmit類(lèi)中的BuildRequestMysign函數),把簽名結果賦值給參數sign,并把sign加入之前的待簽名數組中,此時(shí)得到的便是要請求給支付寶的全部數據。{[_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類(lèi)中的BuildRequest(string GATEWAY_NEW, Dictionary<string, string> sParaTemp, string strMethod, string strButtonValue)函數),此時(shí)商戶(hù)的頁(yè)面會(huì )自動(dòng)跳轉至支付寶收銀臺。圖5-4 跳轉至支付寶收銀臺后面的動(dòng)作全由買(mǎi)家在支付寶收銀臺中操作完成。步驟10: 當這筆交易被買(mǎi)家支付成功后支付寶收銀臺上顯示該筆交易成功,并提示用戶(hù)可返回商戶(hù)網(wǎng)站。買(mǎi)家點(diǎn)擊該功能按鈕后,則當前界面會(huì )跳轉回商戶(hù)設置的call_back_url頁(yè)面文件去,如果長(cháng)時(shí)間沒(méi)有點(diǎn)擊,則當前支付寶收銀臺界面會(huì )自動(dòng)跳轉至商戶(hù)call_back_url頁(yè)面文件去。此時(shí)商戶(hù)的call_back_url頁(yè)面會(huì )收到一串帶有處理結果數據的鏈接地址。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頁(yè)面中的GetRequestGet()函數)做空值過(guò)濾、參數名首字母升序的排序、待簽名數組轉變成待簽名字符串。out_trade_no=cs201306170002&request_token=requestToken&result=success&trade_no=2013061742035035對該字符串做簽名驗證(這一系列動(dòng)作為調用AlipayNotify類(lèi)中的VerifyReturn函數完成),得到布爾類(lèi)型的驗證結果,完成call_back_url頁(yè)面文件的驗證動(dòng)作。步驟12: 買(mǎi)家對一筆交易付款完成的同時(shí),除了支付寶會(huì )觸發(fā)頁(yè)面跳轉至call_back_url文件的同步通知動(dòng)作,還會(huì )自動(dòng)觸發(fā)服務(wù)器異步通知頁(yè)面文件(商戶(hù)設置參數notify_url的值)。此時(shí),商戶(hù)的notify_url文件也會(huì )收到支付寶異步通知回來(lái)的數據。{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)時(shí),需要先對這些數據中的參數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不同,商戶(hù)只需要順序獲取支付寶的返回數據,不需要對這些參數排序。因此,直接把數組sPara(調用notify_url頁(yè)面中的GetRequestPost()函數)轉變成待簽名字符串。service=alipay.wap.trade.create.direct&v=1.0&sec_id=0001¬ify_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>接著(zhù)對該字符串做簽名驗證(這一系列動(dòng)作調用AlipayNotify類(lèi)中的VerifyNotify函數),得到布爾類(lèi)型的驗證結果,完成notify_url頁(yè)面文件的驗證動(dòng)作。步驟14: 在notify_url頁(yè)面文件中,參數notify_data是XML結構的字符串,需要先XML解析,再獲取需要的子節點(diǎn)數據。6 Testing flow rulesTable 6-1 testing flow rulesSteps Debugging contents NotesStep 1: debug this interface independently on this computer 正常獲取授權令牌 模擬手機瀏覽器進(jìn)行付款 頁(yè)面跳轉同步返回 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 正常獲取授權令牌 模擬手機瀏覽器進(jìn)行付款 頁(yè)面跳轉同步返回 服務(wù)器異步通知返回 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 模擬手機瀏覽器進(jìn)行付款 頁(yè)面跳轉同步返回 Subsequent execution of business Debug the interfaces integrated to the website project on this computerStep 5: debug the integrated website project The whole business operation flow 使用手機瀏覽器進(jìn)行付款 頁(yè)面跳轉同步返回 服務(wù)器異步通知返回 Subsequent execution of business After the debugging on this computer is faultless, then put into server for debugging.7 附錄7.1 如何獲得PID與密鑰步驟1: 使用簽約支付寶賬號登錄“商家服務(wù)”平臺中的“我的商家服務(wù)”(https://b.alipay.com/order/serviceIndex.htm)。圖7-1 我的商家服務(wù)步驟2: 在地址欄中輸入https://mobiless.alipay.com/myproduct/my_order.htm,即可查看到簽約支付寶賬號、合作者身份ID(PID)的信息。圖7-2 查看簽約支付寶賬號等信息步驟3: 點(diǎn)擊<密鑰管理>按鈕,輸入“支付密碼”,點(diǎn)擊“確認”,即可查看到各類(lèi)型的私鑰。圖7-3 查看私鑰步驟4: 上傳RSA類(lèi)型的商戶(hù)公鑰,獲得支付寶公鑰。圖7-4獲取支付寶公鑰步驟5: 保存支付寶賬號、合作者身份ID(PID)、交易安全校驗碼(MD5)、交易安全校驗碼(RSA)中的支付寶公鑰。7.2 RSA密鑰生成與使用7.2.1 生成商戶(hù)密鑰1. 打開(kāi)openssl密鑰生成軟件打開(kāi)openssl文件夾下的bin文件夾,執行openssl.exe文件,如下圖:圖7-5 執行openssl.exe文件2. 生成RSA私鑰輸入“genrsa -out rsa_private_key.pem 1024”命令,回車(chē)后,在當前bin文件目錄中會(huì )新增一個(gè)rsa_private_key.pem文件,其文件為原始的商戶(hù)私鑰(請妥善保存該文件,PHP開(kāi)發(fā)語(yǔ)言中需要使用該文件),以下為命令正確執行截圖:圖7-6 生成RSA私鑰3. 生成RSA公鑰輸入“rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem”命令回車(chē)后,在當前bin文件目錄中會(huì )新增一個(gè)rsa_public_key.pem文件,其文件為原始的商戶(hù)公鑰(請妥善保存該文件,PHP開(kāi)發(fā)語(yǔ)言中需要使用該文件),以下為命令正確執行截圖:圖7-7 生成RSA公鑰4. 生成PKCS8編碼的私鑰輸入命令“pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt”并回車(chē),當前界面中會(huì )直接顯示出生成結果:圖7-8 生成PKCS8編碼的私鑰右鍵點(diǎn)擊openssl窗口上邊邊緣,選擇“編輯→標記”,選中要復制的文字:圖7-9 選中要復制的文字此時(shí)繼續右鍵點(diǎn)擊openssl窗口上邊邊緣,選擇“編輯→復制”,把復制的內容粘貼進(jìn)一個(gè)新的記事本中,可隨意命名,只要知道這個(gè)是PKCS8格式的私鑰即可(請妥善保存該文件)。7.2.2 RSA密鑰使用邏輯RSA密鑰使用邏輯:商戶(hù)在使用RSA簽名方式的支付寶接口時(shí),真正會(huì )用到的密鑰是商戶(hù)私鑰與支付寶公鑰。商戶(hù)上傳公鑰給支付寶,支付寶把公鑰給商戶(hù),是公鑰互換的操作。這就使得商戶(hù)使用自己的私鑰做簽名時(shí),支付寶端會(huì )根據商戶(hù)上傳的公鑰做驗證簽名。商戶(hù)使用支付寶公鑰做驗證簽名時(shí),同理,也是因為支付寶用支付寶私鑰做了簽名。1. PHP開(kāi)發(fā)語(yǔ)言使用方法key文件夾里面須存放.pem后綴名的商戶(hù)私鑰、支付寶公鑰兩個(gè)文件。 商戶(hù)的私鑰– 必須保證只有一行文字,即:沒(méi)有回車(chē)、換行、空格等;– 不需要對剛生成的(原始的)私鑰做pkcs8編碼;– 不需要去掉去掉“-----BEGIN PUBLIC KEY-----”、“-----END PUBLIC KEY-----”;– 簡(jiǎn)言之,只要維持剛生成出來(lái)的私鑰的內容即可。 支付寶公鑰(1) 先用簽約支付寶賬號登錄支付寶網(wǎng)站,再瀏覽器訪(fǎng)問(wèn)“https://ms.alipay.com/index.htm”,點(diǎn)擊菜單欄“我的商家服務(wù)”,右側點(diǎn)擊“密鑰管理”進(jìn)入密鑰管理頁(yè)面,復制“交易安全校驗碼(RSA)”→“支付寶公鑰”欄目下的整串信息到一個(gè)新的記事本中,命名為“alipay_public_key.txt”;(2) 去掉這串字符串中的回車(chē)、換行、空格,變成只有一行文字;(3) 在這串支付寶公鑰字符串的頭尾部分,分別增加“-----BEGIN PUBLIC KEY-----”、“-----END PUBLIC KEY-----”這兩條文字;(4) 切割這串支付寶公鑰字符串,切割后的格式與商戶(hù)剛生成的公鑰格式一致即可,如下圖:圖7-10 支付寶公鑰示意圖(5) 保存該記事本,并改變后綴名為.pem。2. JAVA和ASP.NET(C#)開(kāi)發(fā)語(yǔ)言使用方法 商戶(hù)的私鑰– 必須保證只有一行文字,即:沒(méi)有回車(chē)、換行、空格等;– 需對剛生成的(原始的)私鑰做pkcs8編碼;– 編碼完成后,復制該段私鑰,并去掉該段里面的回車(chē)、換行、空格、“-----BEGIN RSA PRIVATE KEY-----”、“-----END RSA PRIVATE KEY-----”。 支付寶公鑰(1) 先用簽約支付寶賬號登錄支付寶網(wǎng)站,再瀏覽器訪(fǎng)問(wèn)“https://ms.alipay.com/index.htm”,點(diǎn)擊菜單欄“我的商家服務(wù)”,右側點(diǎn)擊“密鑰管理”進(jìn)入密鑰管理頁(yè)面,復制“交易安全校驗碼(RSA)”→“支付寶公鑰”欄目下的整串信息;(2) 去掉這串字符串中的回車(chē)、換行、空格,必須保證只有一行文字。7.3 業(yè)務(wù)數據傳遞支付寶提供的業(yè)務(wù)參數為支付寶需要商戶(hù)傳遞過(guò)來(lái)的數據要求。商戶(hù)只需要根據自己的業(yè)務(wù)需求,在業(yè)務(wù)邏輯代碼運行時(shí)把這些動(dòng)態(tài)數據以賦值給變量的形式,再通過(guò)支付寶接口本身的接口邏輯,傳遞給支付寶系統,讓支付寶系統可識別。舉例說(shuō)明,商戶(hù)要把某筆訂單的數據傳遞給支付寶。那么商戶(hù)需要先根據支付寶的參數要求,從自己的下單系統中拿到付款總金額(total_fee)、商戶(hù)的訂單號(out_trade_no)、訂單名稱(chēng)(subject)等數據,再把這些數據一個(gè)一個(gè)以值的形式賦給對應的變量。再通過(guò)代碼邏輯,把變量組合及加工成一次可以發(fā)送給支付寶的請求。7.4 如何增加擴展業(yè)務(wù)參數注意:本章節以代碼示例為例,來(lái)說(shuō)明如何增加擴展業(yè)務(wù)參數,僅供參考。商戶(hù)需要根據自身情況來(lái)編寫(xiě)擴展業(yè)務(wù)參數的代碼。打開(kāi)配置業(yè)務(wù)參數的頁(yè)面文件,找到代碼修改位置。1. JAVA修改流程alipayapi.jsp文件,在參數req_dataToken中的根節點(diǎn)<direct_trade_create_req>下新增子節點(diǎn)。舉例,新增一個(gè)參數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為新增的業(yè)務(wù)參數變量,需商戶(hù)為其賦值。2. PHP修改流程alipayapi.php文件,在參數$req_data中的根節點(diǎn)<direct_trade_create_req>下新增子節點(diǎn)。舉例,新增一個(gè)參數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為新增的業(yè)務(wù)參數變量,需商戶(hù)為其賦值。3. ASP.NET(C#)修改流程default.aspx.cs文件,在參數req_dataToken中的根節點(diǎn)<direct_trade_create_req>下新增子節點(diǎn)。舉例,新增一個(gè)參數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為新增的業(yè)務(wù)參數變量,需商戶(hù)為其賦值。7.5 如何更新訂單在交易過(guò)程中,不僅需要實(shí)現能夠讓買(mǎi)家成功付款,而且還需要商戶(hù)網(wǎng)站的訂單數據與支付寶的交易管理中的交易信息保持一致。要使信息保持一致,就需要商戶(hù)網(wǎng)站的程序開(kāi)發(fā)、維護或管理的技術(shù)人員根據商戶(hù)網(wǎng)站的業(yè)務(wù)流程做訂單更新的程序開(kāi)發(fā)。 訂單更新的業(yè)務(wù)程序代碼放置位置參數notify_url對應的頁(yè)面文件、參數return_url對應的頁(yè)面文件,注釋指定的位置。 訂單更新的頁(yè)面文件如何被調用前提:參數notify_url、參數return_url有被正確設置。– 當買(mǎi)家付款完成時(shí),當前界面會(huì )自動(dòng)跳轉到參數return_url對應的頁(yè)面文件,此時(shí)return_url對應的頁(yè)面文件則被啟動(dòng);– 當該筆交易在支付寶交易管理中存在且交易狀態(tài)改變時(shí),支付寶會(huì )主動(dòng)發(fā)送通知到參數notify_url對應的頁(yè)面文件,此時(shí)參數notify_url對應的頁(yè)面文件則被啟動(dòng)。 如何能獲得支付寶處理完成后的通知返回數據通知返回數據的參數詳見(jiàn)技術(shù)文檔通知返回參數列表。– 參數return_url對應的頁(yè)面文件中獲取參數方式是GET方式獲取,如:request.querrystring("參數名")、$_GET['參數名']– 參數notify_url對應的頁(yè)面文件中獲取參數方式是POST方式獲取,如:request.form("參數名")、$_POST['參數名'] 訂單更新基本思想通過(guò)代碼示例中的驗證之后,獲取支付寶反饋數據,先根據這筆交易找到商戶(hù)網(wǎng)站訂單系統中對應的訂單,再判斷該筆訂單是否已經(jīng)做過(guò)處理,如果未做處理,那么按照商戶(hù)網(wǎng)站的業(yè)務(wù)流程更新訂單數據。Unitrans世聯(lián)翻譯公司在您身邊,離您近的翻譯公司,心貼心的專(zhuān)業(yè)服務(wù),專(zhuān)業(yè)的全球語(yǔ)言翻譯與信息解決方案供應商,專(zhuān)業(yè)翻譯機構品牌。無(wú)論在本地,國內還是海外,我們的專(zhuān)業(yè)、星級體貼服務(wù),為您的事業(yè)加速!世聯(lián)翻譯公司在北京、上海、深圳等國際交往城市設有翻譯基地,業(yè)務(wù)覆蓋全國城市。每天有近百萬(wàn)字節的信息和貿易通過(guò)世聯(lián)走向全球!積累了大量政商用戶(hù)數據,翻譯人才庫數據,多語(yǔ)種語(yǔ)料庫大數據。世聯(lián)品牌和服務(wù)品質(zhì)已得到政務(wù)防務(wù)和國際組織、跨國公司和大中型企業(yè)等近萬(wàn)用戶(hù)的認可。 專(zhuān)業(yè)翻譯公司,北京翻譯公司,上海翻譯公司,英文翻譯,日文翻譯,韓語(yǔ)翻譯,翻譯公司排行榜,翻譯公司收費價(jià)格表,翻譯公司收費標準,翻譯公司北京,翻譯公司上海。