1. 程式人生 > >支付寶通知頁面notify_url、返回頁面return_url

支付寶通知頁面notify_url、返回頁面return_url


同步通知頁面特性(return_url特性):

(1)   買家在支付成功後會看到一個支付寶提示交易成功的頁面,該頁面會停留幾秒,然後會自動跳轉回商戶指定的同步通知頁面(引數return_url);

(2)   該頁面中獲得引數的方式,需要使用GET方式獲取,如request.QueryString("out_trade_no")、$_GET['out_trade_no'];

(3)   該方式僅僅在買家付款完成以後進行自動跳轉,因此只會進行一次;

(4)   該方式不是支付寶主動去呼叫商戶頁面,而是支付寶的程式利用頁面自動跳轉的函式,使使用者的當前頁面自動跳轉;

(5)   基於(4)的原因,可在本機而不是隻能在伺服器上進行除錯;

(6)   返回URL只有一分鐘的有效期,超過一分鐘該連結地址會失效,驗證則會失敗;

(7)   設定頁面跳轉同步通知頁面(return_url)的路徑時,不要在頁面檔案的後面再加上自定義引數。例如:

錯誤的寫法:<<A href="http://www.alipay.com/alipay/return_url.php?xx=11">http://www.alipay.com/alipay/return_url.php?xx=11>

正確的寫法:<<A href="http://www.alipay.com/alipay/return_url.php">http://www.alipay.com/alipay/return_url.php>

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

返回頁面(return_url檔案)工作原理 

即:商戶系統請求/支付寶響應互動模式 

1、 構造請求資料 
商戶通過提供的介面程式碼示例,通過程式碼示例的規則,程式構造與運算得到sign加密結果以及構造後的請求給支付寶的資料集合。GET方式下是URL地址連結,POST方式下是支付寶閘道器地址及引數集合。 

2、 傳送請求資料 
把構造完成的資料集合,通過頁面連結跳轉或表單提交的方式傳遞給支付寶。 
3、 請求的交易 
支付寶得到這些集合後,會先做安全校驗等驗證,一系列驗證通過後便會處理完成這次傳送過來的資料請求。 
4、 返回相應資料 
支付寶對處理完成的交易,程式上自動進行重新構造成URL地址連結,以自動跳轉的方式跳回商家在請求時設定好的頁面路徑地址(引數return_url,商家沒設定,則不會跳回)。 
5、 對相應的資料進行處理 
商家的返回頁面(引數return_url指定頁面檔案)得到支付寶返回的資料,把這些資料結合自身網站情況,進行資料處理(如:訂單更新)。 
Java程式碼  收藏程式碼
  1. <%  
  2. /* * 
  3.  功能:支付寶頁面跳轉同步通知頁面 
  4.  版本:3.2 
  5.  日期:2011-03-17 
  6.  說明: 
  7.  以下程式碼只是為了方便商戶測試而提供的樣例程式碼,商戶可以根據自己網站的需要,按照技術文件編寫,並非一定要使用該程式碼。 
  8.  該程式碼僅供學習和研究支付寶介面使用,只是提供一個參考。 
  9.  //***********頁面功能說明*********** 
  10.  該頁面可在本機電腦測試 
  11.  可放入HTML等美化頁面的程式碼、商戶業務邏輯程式程式碼 
  12.  TRADE_FINISHED(表示交易已經成功結束,為普通即時到帳的交易狀態成功標識); 
  13.  TRADE_SUCCESS(表示交易已經成功結束,為高階即時到帳的交易狀態成功標識); 
  14.  //******************************** 
  15.  * */  
  16. %>  
  17. <%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%>  
  18. <%@ page import="java.util.*"%>  
  19. <%@ page import="java.util.Map"%>  
  20. <%@ page import="com.alipay.util.*"%>  
  21. <%@ page import="com.alipay.services.*"%>  
  22. <%@ page import="com.alipay.config.*"%>  
  23. <html>  
  24.   <head>  
  25.         <meta http-equiv="Content-Type" content="text/html; charset=gbk">  
  26.         <title>支付寶頁面跳轉同步通知頁面</title>  
  27.   </head>  
  28.   <body>  
  29. <%  
  30.     //獲取支付寶GET過來反饋資訊  
  31.     Map<String,String> params = new HashMap<String,String>();  
  32.     Map requestParams = request.getParameterMap();  
  33.     for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {  
  34.         String name = (String) iter.next();  
  35.         String[] values = (String[]) requestParams.get(name);  
  36.         String valueStr = "";  
  37.         for (int i = 0; i < values.length; i++) {  
  38.             valueStr = (i == values.length - 1) ? valueStr + values[i]  
  39.                     : valueStr + values[i] + ",";  
  40.         }  
  41.         //亂碼解決,這段程式碼在出現亂碼時使用。如果mysign和sign不相等也可以使用這段程式碼轉化  
  42.         valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");  
  43.         params.put(name, valueStr);  
  44.     }  
  45.     //獲取支付寶的通知返回引數,可參考技術文件中頁面跳轉同步通知引數列表(以下僅供參考)//  
  46.     String trade_no = request.getParameter("trade_no");             //支付寶交易號  
  47.     String order_no = request.getParameter("out_trade_no");         //獲取訂單號  
  48.     String total_fee = request.getParameter("total_fee");           //獲取總金額  
  49.     String subject = new String(request.getParameter("subject").getBytes("ISO-8859-1"),"gbk");//商品名稱、訂單名稱  
  50.     String body = "";  
  51.     if(request.getParameter("body") != null){  
  52.         body = new String(request.getParameter("body").getBytes("ISO-8859-1"), "gbk");//商品描述、訂單備註、描述  
  53.     }  
  54.     String buyer_email = request.getParameter("buyer_email");       //買家支付寶賬號  
  55.     String trade_status = request.getParameter("trade_status");     //交易狀態  
  56.     //獲取支付寶的通知返回引數,可參考技術文件中頁面跳轉同步通知引數列表(以上僅供參考)//  
  57.     //計算得出通知驗證結果  
  58.     boolean verify_result = AlipayNotify.verify(params);  
  59.     if(verify_result){//驗證成功  
  60.         //////////////////////////////////////////////////////////////////////////////////////////  
  61.         //請在這裡加上商戶的業務邏輯程式程式碼  
  62.         if(trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")){  
  63.             //判斷該筆訂單是否在商戶網站中已經做過處理(可參考“整合教程”中“3.4返回資料處理”)  
  64.                 //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程式  
  65.                 //如果有做過處理,不執行商戶的業務程式  
  66.         }  
  67.         //該頁面可做頁面美工編輯  
  68.         out.println("驗證成功<br />");  
  69.         out.println("trade_no=" + trade_no);  
  70.         //——請根據您的業務邏輯來編寫程式(以上程式碼僅作參考)——  
  71.         //////////////////////////////////////////////////////////////////////////////////////////  
  72.     }else{  
  73.         //該頁面可做頁面美工編輯  
  74.         out.println("驗證失敗");  
  75.     }  
  76. %>  
  77.   </body>  
  78. </html>  

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

伺服器非同步通知頁面特性(notify_url特性):

(1)   必須保證伺服器非同步通知頁面(notify_url)上無任何字元,如空格、HTML標籤、開發系統自帶丟擲的異常提示資訊等;

(2)   支付寶是用POST方式傳送通知資訊,因此該頁面中獲取引數的方式,如:

request.Form("out_trade_no")、$_POST['out_trade_no']。

(3)   支付寶主動發起通知,該方式才會被啟用;

(4)   只有在支付寶的交易管理中存在該筆交易,且發生了交易狀態的改變,支付寶才會通過該方式發起伺服器通知(即時到賬中交易狀態為“等待買家付款”的狀態預設是不會發送通知的);

(5)   伺服器間的互動,不像頁面跳轉同步通知可以在頁面上顯示出來,這種互動方式是不可見的;

(6)   第一次交易狀態改變(即時到賬中此時交易狀態是交易完成)時,不僅頁面跳轉同步通知頁面會啟用,而且伺服器非同步通知頁面也會收到支付寶發來的處理結果通知;

(7)   程式執行完後必須列印輸出“success”(不包含引號)。如果商戶反饋給支付寶的字元不是success這7個字元,支付寶伺服器會不斷重發通知,直到超過24小時22分鐘。

一般情況下,25小時以內完成8次通知(通知的間隔頻率一般是:2m,10m,10m,1h,2h,6h,15h);

(8)   程式執行完成後,該頁面不能執行頁面跳轉。如果執行頁面跳轉,支付寶會收不到success字元,會被支付寶伺服器判定為該頁面程式執行出現異常,而重發處理結果通知;

(9)   cookies、session等在此頁面會失效,即無法獲取這些資料;

(10)   該方式的除錯與執行必須在伺服器上,即網際網路上能訪問;

(11)   該方式的作用主要防止訂單丟失,即頁面跳轉同步通知沒有處理訂單更新,它則去處理;


(12)   通知ID(引數notify_id)只有一分鐘有效期,超過一分鐘該次通知會驗證失敗。一旦驗證成功下次再驗證就會失效。


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

返回頁面(notify_url檔案)工作原理 

即:支付寶主動通知互動模式(支付寶反饋資料) 

前提:若要支付寶能主動通知,需商戶在請求時設定好通知的頁面路徑(引數notify_url),且該頁面檔案完全空白,無任何字元。 
1、 發起通知 
一旦交易狀態發生變更(如:買家已付款,等待賣家發貨),支付寶便會根據自動進行資料處理,並主動呼叫商戶在請求時設定好通知的頁面路徑(引數notify_url) 
2、 對通知資料進行處理 
商戶網站收到支付寶傳送過來的通知資料,把這些資料結合自身網站情況,進行資料處理,如:處理返回頁(引數return_url)漏掉的訂單,做訂單更新,即補單措施。 
3、 在頁面上輸出success 
商戶網站處理完成所有的資料處理以後,即程式執行最後,返回寫頁面“success”這7個字元(頁面上只允許輸出success),以表示自己已經成功處理完成自己的業務。 
4、 完成處理該次通知,不再發送通知 
支付寶得到商戶反饋回來的“success”7個字元資訊,進行核對與驗證,結束此次通知流程。 
注意: 
如果商戶反饋給支付寶的字元不是success這7個字元,支付寶伺服器會不斷重發通知,直到超過24小時22分鐘。在25小時內完成6~10次通知(通知頻率:5s,2m,10m,15m,1h,2h,6h,15h) 
Java程式碼  收藏程式碼
  1. <%  
  2. /* * 
  3.  功能:支付寶伺服器非同步通知頁面 
  4.  版本:3.2 
  5.  日期:2011-03-17 
  6.  說明: 
  7.  以下程式碼只是為了方便商戶測試而提供的樣例程式碼,商戶可以根據自己網站的需要,按照技術文件編寫,並非一定要使用該程式碼。 
  8.  該程式碼僅供學習和研究支付寶介面使用,只是提供一個參考。 
  9.  //***********頁面功能說明*********** 
  10.  建立該頁面檔案時,請留心該頁面檔案中無任何HTML程式碼及空格。 
  11.  該頁面不能在本機電腦測試,請到伺服器上做測試。請確保外部可以訪問該頁面。 
  12.  該頁面除錯工具請使用寫文字函式logResult,該函式在com.alipay.util資料夾的AlipayNotify.java類檔案中 
  13.  如果沒有收到該頁面返回的 success 資訊,支付寶會在24小時內按一定的時間策略重發通知 
  14.  TRADE_FINISHED(表示交易已經成功結束,通用即時到帳反饋的交易狀態成功標誌); 
  15.  TRADE_SUCCESS(表示交易已經成功結束,高階即時到帳反饋的交易狀態成功標誌); 
  16.  //******************************** 
  17.  * */  
  18. %>  
  19. <%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%>  
  20. <%@ page import="java.util.*"%>  
  21. <%@ page import="com.alipay.util.*"%>  
  22. <%@ page import="com.alipay.services.*"%>  
  23. <%@ page import="com.alipay.config.*"%>  
  24. <%  
  25.     //獲取支付寶POST過來反饋資訊  
  26.     Map<String,String> params = new HashMap<String,String>();  
  27.     Map requestParams = request.getParameterMap();  
  28.     for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {  
  29.         String name = (String) iter.next();  
  30.         String[] values = (String[]) requestParams.get(name);  
  31.         String valueStr = "";  
  32.         for (int i = 0; i < values.length; i++) {  
  33.             valueStr = (i == values.length - 1) ? valueStr + values[i]  
  34.                     : valueStr + values[i] + ",";  
  35.         }  
  36.         //亂碼解決,這段程式碼在出現亂碼時使用。如果mysign和sign不相等也可以使用這段程式碼轉化  
  37.         //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");  
  38.         params.put(name, valueStr);  
  39.     }  
  40.     //獲取支付寶的通知返回引數,可參考技術文件中頁面跳轉同步通知引數列表(以下僅供參考)//  
  41.     String trade_no = request.getParameter("trade_no");             //支付寶交易號  
  42.     String order_no = request.getParameter("out_trade_no");         //獲取訂單號  
  43.     String total_fee = request.getParameter("total_fee");           //獲取總金額  
  44.     String subject = new String(request.getParameter("subject").getBytes("ISO-8859-1"),"gbk");//商品名稱、訂單名稱  
  45.     String body = "";  
  46.     if(request.getParameter("body") != null){  
  47.         body = new String(request.getParameter("body").getBytes("ISO-8859-1"), "gbk");//商品描述、訂單備註、描述  
  48.     }  
  49.     String buyer_email = request.getParameter("buyer_email");       //買家支付寶賬號  
  50.     String trade_status = request.getParameter("trade_status");     //交易狀態  
  51.     //獲取支付寶的通知返回引數,可參考技術文件中頁面跳轉同步通知引數列表(以上僅供參考)//  
  52.     if(AlipayNotify.verify(params)){//驗證成功  
  53.         //////////////////////////////////////////////////////////////////////////////////////////  
  54.         //請在這裡加上商戶的業務邏輯程式程式碼  
  55.         //——請根據您的業務邏輯來編寫程式(以下程式碼僅作參考)——  
  56.         if(trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")){  
  57.             //判斷該筆訂單是否在商戶網站中已經做過處理(可參考“整合教程”中“3.4返回資料處理”)  
  58.                 //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程式  
  59. 相關推薦

    支付通知頁面notify_url返回頁面return_url

    同步通知頁面特性(return_url特性): (1)   買家在支付成功後會看到一個支付寶提示交易成功的頁面,該頁面會停留幾秒,然後會自動跳轉回商戶指定的同步通知頁面(引數return_url); (2)   該頁面中獲得引數的方式,需要使用GET方式獲取,如re

    支付通知返回時的交易狀態列表

    bsp 高級 同步 tar spa 人工 sed 默認 https 即時到帳接口——交易狀態列表 交易狀態操作:支付寶有交易記錄,沒付款 交易狀態(trade_status):WAIT_BUYER_PAY 備註:通知不會返回,不能申請修改。 交易狀態操作:交易完成 交

    JS實現頁面進入返回定位到具體位置

    其實瀏覽器也自帶了返回的功能,也就是說,自帶了返回定位的功能。正常的跳轉,返回確實可以定位,但是有些特殊場景就不適用了。例如,某些元素是在某種情況下才加上的,又或者多級定位。  目前,我知道的返回定位到具體位置有兩種方法: ①利用id定位,在跳轉的時候帶上某個模組的i

    通過調用支付查詢對賬單接口返回bill_download_url下載zip,解壓縮

    read new edi p2s turn zipentry path public ipa 通過url下載zip對賬單文件,進行解壓。 讀取壓縮文件內容 import java.io.BufferedOutputStream; import java.io.Buffer

    wemall app商城原始碼Android之支付通知處理類

           wemall-mobile是基於WeMall的Android app商城,只需要在原商城目錄下上傳介面檔案即可完成服務端的配置,客戶端可定製修改。本文分享wemall app商城原始碼Android之處理支付寶各介面通知返回,供技術員參考學習。    

    uni-app 1.4 釋出,一套程式碼,發行小程式(微信/支付/百度)H5App多個平臺

    在2019新年到來之際,uni-app 1.4版本正式釋出,新增支援百度、支付寶小程式,開放外掛市場,同時注入更多優秀特性,為開發者送上了一份新年大禮! 支援更多小程式平臺 uni-app 1.4 版本新增支援百度、支付寶小程式,從此一次開發,可釋出小程式(微信/支付寶/百度)、H5、App(iOS/An

    支付通知notify url處理

    1) 獲取APPID notify_url是非同步介面,支付寶會發多次,直到收到你的響應; 至於你說的重複問題,你的後臺需要根據流水號、訂單號等資訊判斷是否已經接收過請求併成功處理(insert 支付流水,update訂單狀態等),處理過就直接返回; 另外n

    微信內建瀏覽器和支付內建瀏覽器 進行防止返回返回跳轉到指定頁面

    //防止返回歷史記錄 pushHistory(); function pushHistory() { var state = { title: "title", url: "#" }; window.history.pushState(sta

    通過user-agent判斷h5頁面是在哪個手機App(QQ微信支付)下開啟的

    function getAppClient(){   var ua = navigator.userAgent.toLowerCase();   if(ua.match(/MicroMessenger/i)=="micromessenger") {   return "weixin";   }

    支付:web頁面掃碼支付網站支付支付即時到賬 + springmvc

    一、場景:公司需要在網站上進行支付寶支付。 二、API:使用支付寶開放平臺的支付能力-即時到賬介面。支付寶開放平臺連結 三、分析: 1、支付寶的文件比較容易看,主要是有相應的DEMO,我這裡看的DEMO是 JAVA-UTF-8版本。 2、匯入DEMO

    支付支付成功可以跳轉頁面但是沒有回調

    遠程數據庫 使用 速度慢 數據庫 ont 文件 權限 排查 跳轉 圖片上傳多圖上傳回調內置上傳等使用mysqldump備份恢復數據庫問題(密碼+恢復方面)TP5018報錯Loaderphp文件自動加載composer引入的 請問一下tp32項目運行速度慢應該如何排查呢0*

    JS監聽微信支付等移動app及瀏覽器的返回後退上一頁按鈕的事件方法

    on() 移動app 自己的 win 功能 監聽 ner tor event $(function(){ pushHistory(); window.addEventListener("popstate", function(e) { alert("我監聽到

    支付介面(掃碼支付的原理)使用文件說明 支付非同步通知(notify_url)與return_url.

    支付寶介面使用文件說明 支付寶非同步通知(notify_url)與return_url.  現支付寶的通知有兩類。  A伺服器通知,對應的引數為notify_url,支付寶通知使用POST方式  B頁面跳轉通知,對應的引數為return_url,支

    前端:微信支付支付支付在pc端和h5頁面中的應用

    1:h5微信支付 使用的是https://pay.weixin.qq.com/wiki/doc/api/index.html  中的 (1):公司需要首先要配置公眾號微信支付地址和測試白名單(支付的時候顯示這個支付頁面沒許可權有可能是這個原因) 如上圖http://ww

    android點選極光推送的通知跳轉到webview頁面顯示網頁,webview返回錯誤程式碼-6,無法連線伺服器

    這個bug比較坑,在webview中無法開啟,將地址複製到電腦瀏覽器中能正常開啟,網上搜索到的說無法連線伺服器是沒有加"http://",可我是加了的,我加了還是打不開。某法了,去看看IP地址,終於讓我找到問題了。 後臺伺服器我搭建的是本地的,請求地址也是後臺返回來的,結果

    支付小程式跳轉到h5頁面web-view

    支付寶小程式跳轉到h5頁面web-view 基礎庫 1.6.0 開始支援,低版本需做相容 元件是一個可以用來承載H5網頁的元件,會自動鋪滿整個小程式頁面。 web-view 要渲染的H5網頁URL。H5網頁URL需要登入小程式管理後臺-小程式詳細-設定中,進行H5域名白名單配置 示

    很多人都不知道的監聽微信支付等移動app及瀏覽器的返回後退上一頁按鈕的事件方法

    在實際的應用中,我們常常需要實現在移動app和瀏覽器中點選返回、後退、上一頁等按鈕實現自己的關閉頁面、調整到指定頁面或執行一些其它操作的 需求,那在程式碼中怎樣監聽當點選微信、支付寶、百度糯米、百度錢包等app的返回按鈕或者瀏覽器的上一頁或後退按鈕的事件呢。 我相信很多朋

    微信瀏覽器開啟支付支付頁面

    最近遇到了一點小難題 微信瀏覽器 預設把支付寶正式閘道器遮蔽了,怎麼才能在微信瀏覽器內開啟正式的支付寶支付頁面呢, 答案很簡單,用frame實現.  主要做法 把傳送給支付寶的url鑲嵌在frame的

    web頁面呼叫支付支付

      web頁面呼叫支付寶支付 此文章是前端單獨模擬完成支付,若在線上環境則需要後臺配合產生簽名等引數 在螞蟻金服開放平臺申請沙箱環境 將沙箱環境中的金鑰、應用閘道器、回撥地址補

    判斷是微信內建瀏覽器還是支付內建瀏覽及微信/支付內開啟的頁面退回到微信/支付

    首先我們需要,判斷當前使用者是從微信或者支付進入的頁面; var isAliOrWx = function() { var typeBower = ''; var browser = { versions: function() {