支付寶通知頁面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程式碼
- <%
- /* *
- 功能:支付寶頁面跳轉同步通知頁面
- 版本:3.2
- 日期:2011-03-17
- 說明:
- 以下程式碼只是為了方便商戶測試而提供的樣例程式碼,商戶可以根據自己網站的需要,按照技術文件編寫,並非一定要使用該程式碼。
- 該程式碼僅供學習和研究支付寶介面使用,只是提供一個參考。
- //***********頁面功能說明***********
- 該頁面可在本機電腦測試
- 可放入HTML等美化頁面的程式碼、商戶業務邏輯程式程式碼
- TRADE_FINISHED(表示交易已經成功結束,為普通即時到帳的交易狀態成功標識);
- TRADE_SUCCESS(表示交易已經成功結束,為高階即時到帳的交易狀態成功標識);
- //********************************
- * */
- %>
- <%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%>
- <%@ page import="java.util.*"%>
- <%@ page import="java.util.Map"%>
- <%@ page import="com.alipay.util.*"%>
- <%@ page import="com.alipay.services.*"%>
- <%@ page import="com.alipay.config.*"%>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gbk">
- <title>支付寶頁面跳轉同步通知頁面</title>
- </head>
- <body>
- <%
- //獲取支付寶GET過來反饋資訊
- Map<String,String> params = new HashMap<String,String>();
- Map requestParams = request.getParameterMap();
- for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
- String name = (String) iter.next();
- String[] values = (String[]) requestParams.get(name);
- String valueStr = "";
- for (int i = 0; i < values.length; i++) {
- valueStr = (i == values.length - 1) ? valueStr + values[i]
- : valueStr + values[i] + ",";
- }
- //亂碼解決,這段程式碼在出現亂碼時使用。如果mysign和sign不相等也可以使用這段程式碼轉化
- valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
- params.put(name, valueStr);
- }
- //獲取支付寶的通知返回引數,可參考技術文件中頁面跳轉同步通知引數列表(以下僅供參考)//
- String trade_no = request.getParameter("trade_no"); //支付寶交易號
- String order_no = request.getParameter("out_trade_no"); //獲取訂單號
- String total_fee = request.getParameter("total_fee"); //獲取總金額
- String subject = new String(request.getParameter("subject").getBytes("ISO-8859-1"),"gbk");//商品名稱、訂單名稱
- String body = "";
- if(request.getParameter("body") != null){
- body = new String(request.getParameter("body").getBytes("ISO-8859-1"), "gbk");//商品描述、訂單備註、描述
- }
- String buyer_email = request.getParameter("buyer_email"); //買家支付寶賬號
- String trade_status = request.getParameter("trade_status"); //交易狀態
- //獲取支付寶的通知返回引數,可參考技術文件中頁面跳轉同步通知引數列表(以上僅供參考)//
- //計算得出通知驗證結果
- boolean verify_result = AlipayNotify.verify(params);
- if(verify_result){//驗證成功
- //////////////////////////////////////////////////////////////////////////////////////////
- //請在這裡加上商戶的業務邏輯程式程式碼
- if(trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")){
- //判斷該筆訂單是否在商戶網站中已經做過處理(可參考“整合教程”中“3.4返回資料處理”)
- //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程式
- //如果有做過處理,不執行商戶的業務程式
- }
- //該頁面可做頁面美工編輯
- out.println("驗證成功<br />");
- out.println("trade_no=" + trade_no);
- //——請根據您的業務邏輯來編寫程式(以上程式碼僅作參考)——
- //////////////////////////////////////////////////////////////////////////////////////////
- }else{
- //該頁面可做頁面美工編輯
- out.println("驗證失敗");
- }
- %>
- </body>
- </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),且該頁面檔案完全空白,無任何字元。
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程式碼
- <%
- /* *
- 功能:支付寶伺服器非同步通知頁面
- 版本:3.2
- 日期:2011-03-17
- 說明:
- 以下程式碼只是為了方便商戶測試而提供的樣例程式碼,商戶可以根據自己網站的需要,按照技術文件編寫,並非一定要使用該程式碼。
- 該程式碼僅供學習和研究支付寶介面使用,只是提供一個參考。
- //***********頁面功能說明***********
- 建立該頁面檔案時,請留心該頁面檔案中無任何HTML程式碼及空格。
- 該頁面不能在本機電腦測試,請到伺服器上做測試。請確保外部可以訪問該頁面。
- 該頁面除錯工具請使用寫文字函式logResult,該函式在com.alipay.util資料夾的AlipayNotify.java類檔案中
- 如果沒有收到該頁面返回的 success 資訊,支付寶會在24小時內按一定的時間策略重發通知
- TRADE_FINISHED(表示交易已經成功結束,通用即時到帳反饋的交易狀態成功標誌);
- TRADE_SUCCESS(表示交易已經成功結束,高階即時到帳反饋的交易狀態成功標誌);
- //********************************
- * */
- %>
- <%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%>
- <%@ page import="java.util.*"%>
- <%@ page import="com.alipay.util.*"%>
- <%@ page import="com.alipay.services.*"%>
- <%@ page import="com.alipay.config.*"%>
- <%
- //獲取支付寶POST過來反饋資訊
- Map<String,String> params = new HashMap<String,String>();
- Map requestParams = request.getParameterMap();
- for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
- String name = (String) iter.next();
- String[] values = (String[]) requestParams.get(name);
- String valueStr = "";
- for (int i = 0; i < values.length; i++) {
- valueStr = (i == values.length - 1) ? valueStr + values[i]
- : valueStr + values[i] + ",";
- }
- //亂碼解決,這段程式碼在出現亂碼時使用。如果mysign和sign不相等也可以使用這段程式碼轉化
- //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
- params.put(name, valueStr);
- }
- //獲取支付寶的通知返回引數,可參考技術文件中頁面跳轉同步通知引數列表(以下僅供參考)//
- String trade_no = request.getParameter("trade_no"); //支付寶交易號
- String order_no = request.getParameter("out_trade_no"); //獲取訂單號
- String total_fee = request.getParameter("total_fee"); //獲取總金額
- String subject = new String(request.getParameter("subject").getBytes("ISO-8859-1"),"gbk");//商品名稱、訂單名稱
- String body = "";
- if(request.getParameter("body") != null){
- body = new String(request.getParameter("body").getBytes("ISO-8859-1"), "gbk");//商品描述、訂單備註、描述
- }
- String buyer_email = request.getParameter("buyer_email"); //買家支付寶賬號
- String trade_status = request.getParameter("trade_status"); //交易狀態
- //獲取支付寶的通知返回引數,可參考技術文件中頁面跳轉同步通知引數列表(以上僅供參考)//
- if(AlipayNotify.verify(params)){//驗證成功
- //////////////////////////////////////////////////////////////////////////////////////////
- //請在這裡加上商戶的業務邏輯程式程式碼
- //——請根據您的業務邏輯來編寫程式(以下程式碼僅作參考)——
- if(trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")){
- //判斷該筆訂單是否在商戶網站中已經做過處理(可參考“整合教程”中“3.4返回資料處理”)
- //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程式
-
相關推薦
支付寶通知頁面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 釋出,一套程式碼,發行小程式(微信/支付寶/百度)、H5、App多個平臺
在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() {