支付寶手機網站接入1

用戶已安裝支付寶支付流程php

步驟1:用戶在瀏覽器中訪問商家網頁應用,選擇商品下單、確認購買,進入支付環節,選擇支付寶付款,用戶點擊去支付,以下圖1;html

步驟2:進入到支付寶支付路由頁面,支付寶處理支付請求,並嘗試喚起支付寶客戶端,以下圖2;前端

步驟3:進入到支付寶頁面,調起支付寶支付,出現確認支付界面,以下圖3;java

圖1:

web

2:算法

圖3:

步驟4:用戶確認收款方和金額,點擊當即支付後出現輸入密碼界面,以下圖4;json

步驟5:輸入正確密碼後,支付寶端顯示支付結果,以下圖5;api

步驟6:自動回跳到瀏覽器中,商家根據付款結果個性化展現訂單處理結果,以下圖6。瀏覽器

圖4:
圖5:
圖6:

用戶未安裝支付寶支付流程安全

步驟1:若用戶未安裝支付寶客戶端,用戶進入到支付寶網頁收銀臺,用戶登陸支付寶帳戶,如圖7和圖8;

步驟2:登陸成功後,進入付款確認頁面,如圖9;

步驟3:用戶點擊確認付款,進入支付密碼頁面,如圖10;

步驟4:用戶輸入密碼,完成支付,展現支付結果,如圖11。

圖7:
圖8:
圖9:
圖10:
圖11:

應用案例

1. 目前已上線的部分支付案例,商家可在瀏覽器中訪問對應商家網站,進行實際體驗。

餓了麼、攜程、亞馬遜APP。

2. 支付寶收銀臺界面規範

列表首位+默認勾選+Logo+推薦標籤+標語,最低標準爲「Logo+支付寶」,並將做爲審覈依據。

3. 支付寶Logo、收銀臺素材下載

 

 

第一步:建立應用並獲取APPID

要在您的應用中使用支付寶開放產品的接口能力,您須要先去螞蟻金服開放平臺(open.alipay.com),在開發者中心中建立登記您的應用,並提交審覈,審覈經過後會爲您生成應用惟一標識(APPID),而且能夠申請開通開放產品使用權限,經過APPID您的應用才能調用開放產品的接口能力。須要詳細瞭解開放平臺建立應用步驟請參考《開放平臺應用建立指南》

第二步:配置密鑰

開發者調用接口前須要先生成RSA密鑰,RSA密鑰包含應用私鑰(APP_PRIVATE_KEY)、應用公鑰(APP_PUBLIC_KEY)。生成密鑰後在開放平臺開發者中心進行密鑰配置,配置完成後能夠獲取支付寶公鑰(ALIPAY_PUBLIC_KEY)。詳細步驟請參考《配置應用環境》

第三步:搭建和配置開發環境

1. 下載服務端SDK

爲了幫助開發者調用開放接口,咱們提供了開放平臺服務端SDK,包含JAVA、PHP和.NET三語言版本,封裝了簽名&驗籤、HTTP接口請求等基礎功能。請先下載對應語言版本的SDK並引入您的開發工程。

2. 接口調用配置

各語言版本服務端SDK詳細使用說明,請參考《服務端SDK使用說明

在使用SDK調用具體API前,進行初始化,代碼以下:

1
AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
配置參數 示例值解釋 獲取方式/示例值
URL 支付寶網關(固定) https://openapi.alipay.com/gateway.do
APP_ID APPID即建立應用後生成 獲取見上面建立應用並獲取APPID
APP_PRIVATE_KEY 開發者應用私鑰,由開發者本身生成 獲取見上面配置密鑰
FORMAT 參數返回格式,只支持json json(固定)
CHARSET 請求和簽名使用的字符編碼格式,支持GBK和UTF-8 開發者根據實際工程編碼配置
ALIPAY_PUBLIC_KEY 支付寶公鑰,由支付寶生成 獲取詳見上面配置密鑰
SIGN_TYPE 商戶生成簽名字符串所使用的簽名算法類型,目前支持RSA2和RSA,推薦使用RSA2 RSA2

接下來,就能夠用alipayClient來調用具體的API了。alipayClient只須要初始化一次,後續調用不一樣的API均可以使用同一個alipayClient對象。

TIPS:手機網站支付不支持第三方受權,不能代商家發起請求。

第四步:調用接口

手機網站支付產品包含兩類API:

  • 頁面跳轉類:須要從前端頁面以Form表單的形式發起請求,瀏覽器會自動跳轉至支付寶的相關頁面(通常是收銀臺或簽約頁面),用戶在該頁面完成相關業務操做後再回跳到商戶指定頁面。例如本產品中的手機網站支付接口alipay.trade.wap.pay
  • 系統調用類:直接從服務端發起HTTP請求,支付寶會同步返回請求結果。例如本產品中的交易查詢等配套API。

調用流程

調用流程

如上圖所示,用戶在商戶的H5網站下單支付後,商戶系統按照手機網站支付接口alipay.trade.wap.payAPI的參數規範生成訂單數據,而後在前端頁面經過Form表單的形式請求到支付寶。此時支付寶會自動將頁面跳轉至支付寶H5收銀臺頁面,若是用戶手機上安裝了支付寶APP,則自動喚起支付寶APP。開發者須要關注安裝了支付寶和未安裝支付寶的兩種測試場景,對於在手機瀏覽器喚起H5頁面的模式下,若是安裝了支付寶卻沒有喚起,大部分緣由是當前瀏覽器不在支付寶配置的白名單內,對於商戶app內嵌webview中的支付場景,建議集成支付寶App支付產品。

用戶在支付寶APP或H5收銀臺完成支付後,會根據商戶在手機網站支付API中傳入的前臺回跳地址return_url自動跳轉回商戶頁面,同時在URL請求中以Query String的形式附帶上支付結果參數,詳細回跳參數見「手機網站支付接口alipay.trade.wap.pay」前臺回跳參數

同時,支付寶還會根據原始支付API中傳入的異步通知地址notify_url,經過POST請求的形式將支付結果做爲參數通知到商戶系統,詳情見支付結果異步通知

除了正向支付流程外,支付寶也提供交易查詢、關閉、退款、退款查詢以及對帳等配套API。

特別注意:

  • 因爲前臺回跳的不可靠性,前臺回跳只能做爲商戶支付結果頁的入口,最終支付結果必須以異步通知或查詢接口返回爲準,不能依賴前臺回跳。
  • 商戶系統接收到異步通知之後,必須經過驗籤(驗證通知中的sign參數)來確保支付通知是由支付寶發送的。詳細驗籤規則參考異步通知驗籤
  • 接受到異步通知並驗籤經過後,必定要檢查通知內容,包括通知中的app_id, out_trade_no, total_amount是否與請求中的一致,並根據trade_status進行後續業務處理。

使用SDK快速接入

手機網站支付alipay.trade.wap.pay:
對於頁面跳轉類API,SDK不會也沒法像系統調用類API同樣自動請求支付寶並得到結果,而是在接受request請求對象後,爲開發者生成前臺頁面請求須要的完整form表單的html(包含自動提交腳本),商戶直接將這個表單的String輸出到http response中便可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void doPost(HttpServletRequest httpRequest,
                       HttpServletResponse httpResponse) throws ServletException, IOException {
     AlipayClient alipayClient = new DefaultAlipayClient( "https://openapi.alipay.com/gateway.do" , APP_ID, APP_PRIVATE_KEY, "json" , CHARSET, ALIPAY_PUBLIC_KEY, "RSA2" ); //得到初始化的AlipayClient
     AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest(); //建立API對應的request
     alipayRequest.setReturnUrl( "http://domain.com/CallBack/return_url.jsp" );
     alipayRequest.setNotifyUrl( "http://domain.com/CallBack/notify_url.jsp" );//在公共參數中設置回跳和通知地址
     alipayRequest.setBizContent( "{" +
         "    \"out_trade_no\":\"20150320010101002\"," +
         "    \"total_amount\":\"88.88\"," +
         "    \"subject\":\"Iphone6 16G\"," +
         "    \"seller_id\":\"2088123456789012\"," +
         "    \"product_code\":\"QUICK_WAP_PAY\"" +
         "  }" ); //填充業務參數
     String form= "" ;
     try {
         form = alipayClient.pageExecute(alipayRequest).getBody(); //調用SDK生成表單
     } catch (AlipayApiException e) {
         e.printStackTrace();
     }
     httpResponse.setContentType( "text/html;charset=" + CHARSET);
     httpResponse.getWriter().write(form); //直接將完整的表單html輸出到頁面
     httpResponse.getWriter().flush();
     httpResponse.getWriter().close();
}

關鍵入參:

參數名稱 參數說明
out_trade_no 商戶訂單號,須要保證不重複
subject 訂單標題
seller_id 實際收款帳號,通常填寫商戶PID便可
total_amount 訂單金額

異步通知驗籤:

1
2
3
4
5
6
7
Map<String, String> paramsMap = ... //將異步通知中收到的全部參數都存放到map中
boolean signVerified = AlipaySignature.rsaCheckV1(paramsMap, ALIPAY_PUBLIC_KEY, CHARSET, SIGN_TYPE) //調用SDK驗證簽名
if (signVerfied){
     // TODO 驗籤成功後,按照支付結果異步通知中的描述,對支付結果中的業務內容進行二次校驗,校驗成功後在response中返回success並繼續商戶自身業務處理,校驗失敗返回failure
} else {
     // TODO 驗籤失敗則記錄異常日誌,並在response中返回failure.
}

關鍵通知參數:

參數名稱 參數說明
trade_no 支付寶28位交易號
trade_status 交易狀態
total_amount 訂單金額

交易查詢接口alipay.trade.query:

1
2
3
4
5
6
7
8
9
AlipayClient alipayClient = new DefaultAlipayClient( "https://openapi.alipay.com/gateway.do" , APP_ID, APP_PRIVATE_KEY, "json" , CHARSET, ALIPAY_PUBLIC_KEY, "RSA2" ); //得到初始化的AlipayClient
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); //建立API對應的request類
request.setBizContent( "{" +
"    \"out_trade_no\":\"20150320010101001\"," +
"    \"trade_no\":\"2014112611001004680073956707\"" +
"  }" ); //設置業務參數
AlipayTradeQueryResponse response = alipayClient.execute(request); //經過alipayClient調用API,得到對應的response類
System.out.print(response.getBody());
//根據response中的結果繼續業務邏輯處理

關鍵入參:

參數名稱 參數說明
out_trade_no 支付時傳入的商戶訂單號,與trade_no必填一個
trade_no 支付時返回的支付寶交易號,與out_trade_no必填一個

關鍵出參:

參數名稱 參數說明
trade_no 支付寶28位交易號
out_trade_no 支付時傳入的商戶訂單號
trade_status 交易當前狀態

交易退款接口alipay.trade.refund:

1
2
3
4
5
6
7
8
9
10
11
AlipayClient alipayClient = new DefaultAlipayClient( "https://openapi.alipay.com/gateway.do" , APP_ID, APP_PRIVATE_KEY, "json" , CHARSET, ALIPAY_PUBLIC_KEY, "RSA2" ); //得到初始化的AlipayClient
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); //建立API對應的request類
request.setBizContent( "{" +
"    \"out_trade_no\":\"20150320010101001\"," +
"    \"trade_no\":\"2014112611001004680073956707\"," +
"    \"out_request_no\":\"1000001\"," +
"    \"refund_amount\":\"2014112611001004680073956707\"" +
"  }" ); //設置業務參數
AlipayTradeRefundResponse response = alipayClient.execute(request); //經過alipayClient調用API,得到對應的response類
System.out.print(response.getBody());
//根據response中的結果繼續業務邏輯處理

關鍵入參:

參數名稱 參數說明
out_trade_no 支付時傳入的商戶訂單號,與trade_no必填一個
trade_no 支付時返回的支付寶交易號,與out_trade_no必填一個
out_request_no 本次退款請求流水號,部分退款時必傳
refund_amount 本次退款金額

關鍵出參:

參數名稱 參數說明
refund_fee 該筆交易已退款的總金額

查詢對帳單下載地址接口alipay.data.dataservice.bill.downloadurl.query:

1
2
3
4
5
6
7
8
9
AlipayClient alipayClient = new DefaultAlipayClient( "https://openapi.alipay.com/gateway.do" , APP_ID, APP_PRIVATE_KEY, "json" , CHARSET, ALIPAY_PUBLIC_KEY, "RSA2" ); //得到初始化的AlipayClient
AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest(); //建立API對應的request類
request.setBizContent( "{" +
"    \"bill_type\":\"trade\"," +
"    \"bill_date\":\"2016-04-05\""
"  }" ); //設置業務參數
AlipayDataDataserviceBillDownloadurlQueryResponse response = alipayClient.execute(request);
System.out.print(response.getBody());
//根據response中的結果繼續業務邏輯處理

關鍵入參:

參數名稱 參數說明
bill_type 固定傳入trade
bill_date 須要下載的帳單日期,最晚是當期日期的前一天

關鍵出參:

參數名稱 參數說明
bill_download_url 帳單文件下載地址,30秒有效

下載帳單文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//將接口返回的對帳單下載地址傳入urlStr
//指定但願保存的文件路徑
String filePath = "/Users/fund_bill_20160405.csv" ;
URL url = null ;
HttpURLConnection httpUrlConnection = null ;
InputStream fis = null ;
FileOutputStream fos = null ;
try {
     url = new URL(urlStr);
     httpUrlConnection = (HttpURLConnection) url.openConnection();
     httpUrlConnection.setConnectTimeout( 5 * 1000 );
     httpUrlConnection.setDoInput( true );
     httpUrlConnection.setDoOutput( true );
     httpUrlConnection.setUseCaches( false );
     httpUrlConnection.setRequestMethod( "GET" );
     httpUrlConnection.setRequestProperty( "Charsert" , "UTF-8" );
     httpUrlConnection.connect();
     fis = httpUrlConnection.getInputStream();
     byte [] temp = new byte [ 1024 ];
     int b;
     fos = new FileOutputStream( new File(filePath));
     while ((b = fis.read(temp)) != - 1 ) {
         fos.write(temp, 0 , b);
         fos.flush();
     }
} catch (MalformedURLException e) {
     e.printStackTrace();
} catch (IOException e) {
     e.printStackTrace();
} finally {
     try {
         if (fis!= null ) fis.close();
         if (fos!= null ) fos.close();
         if (httpUrlConnection!= null ) httpUrlConnection.disconnect();
     } catch (IOException e) {
         e.printStackTrace();
     }
}

關於沙箱

如何接入沙箱

沙箱環境是開放平臺提供給開發者調試接口的環境,具體操做步驟見 沙箱接入指南

手機網站支付沙箱接入注意點

一、手機網站支付支持沙箱接入;在沙箱調通接口後,必須在線上進行測試與驗收,全部返回碼及業務邏輯以線上爲準;
二、手機網站支付只支持餘額支付,不支持銀行卡、餘額寶等其餘支付方式;
三、支付時,請使用沙箱買家帳號支付,在登陸支付寶,輸入手機號的頁面,點擊右下角 支付寶帳戶登陸;

 

 

 

開發語言 資源下載 環境要求
JAVA版資源 SDK1.5 適用於Java語言、jdk版本1.5及以上的開發環境
.NET版資源 SDK 適用於Visual studio 2010及以上版本、Framework3.5及以上版本的開發環境
PHP版資源 SDK 適用於php5.5以上的開發環境

SDK集成

  1. SDK已經對加簽驗籤邏輯作了封裝,使用SDK可直接調用API。
  2. 肯定接口對應的類
    例如接口名:alipay.offline.material.image.upload
    在SDK中對應的類爲:每一個單詞首字母大寫,並去掉分隔符(「.」),末尾加上Request(或Response)
    如上接口名對應的類爲:
    AlipayOfflineMaterialImageUploadRequest(請求類)
    AlipayOfflineMaterialImageUploadResponse(響應類)
    具體調用方式見下方各語言。

JavaSDK集成示例

SDK包說明

  • alipay-sdk-java*.jar—————————支付寶SDK編譯文件jar
  • alipay-sdk-java*-source.jar——————支付寶SDK源碼文件jar
  • commons-logging-1.1.1.jar——————SDK依賴的日誌jar
  • commons-logging-1.1.1-sources.jar———SDK依賴的日誌源碼jar

注意

  • 集成支付寶接口須要引入的文件是:
    alipay-sdk-java*.jar
    commons-logging-1.1.1.jar
  • 若進一步瞭解代碼實現請引入文件:
    alipay-sdk-java*-source.jar
    commons-logging-1.1.1-sources.jar

普通調用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//實例化客戶端
AlipayClient alipayClient = new DefaultAlipayClient( "https://openapi.alipay.com/gateway.do" , APP_ID, APP_PRIVATE_KEY, "json" , CHARSET, ALIPAY_PUBLIC_KEY, "RSA2" );
//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.open.public.template.message.industry.modify
AlipayOpenPublicTemplateMessageIndustryModifyRequest request = new AlipayOpenPublicTemplateMessageIndustryModifyRequest();
//SDK已經封裝掉了公共參數,這裏只須要傳入業務參數
//這次只是參數展現,未進行字符串轉義,實際狀況下請轉義
request.setBizContent( "  {" +
"    \"primary_industry_name\":\"IT科技/IT軟件與服務\"," +
"    \"primary_industry_code\":\"10001/20102\"," +
"    \"secondary_industry_code\":\"10001/20102\"," +
"    \"secondary_industry_name\":\"IT科技/IT軟件與服務\"" +
" }" );
AlipayOpenPublicTemplateMessageIndustryModifyResponse response = alipayClient.execute(request);
//調用成功,則處理業務邏輯
if (response.isSuccess()){
     //.....
}

圖片上傳接口調用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
AlipayClient alipayClient = new DefaultAlipayClient( "https://openapi.alipay.com/gateway.do" , APP_ID, APP_PRIVATE_KEY, "json" , CHARSET, ALIPAY_PUBLIC_KEY, "RSA2" );
// 實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.offline.material.image.upload
AlipayOfflineMaterialImageUploadRequest request = new AlipayOfflineMaterialImageUploadRequest();
request.setImageName( "test" );
//Windows請填寫絕對路徑,不支持相對路徑;Linux支持相對路徑
FileItem item = new FileItem( "C:/Downloads/ooopic_963991_7eea1f5426105f9e6069/16365_1271139700.jpg" );
request.setImageType( "JPG" );
request.setImageContent(item);
//執行API請求
AlipayOfflineMaterialImageUploadResponse response = alipayClient.execute(request);
//調用成功,則處理業務邏輯
if (response.isSuccess()){
      //獲取圖片訪問地址
     String imageUrl = response.getImageUrl();
     //.....
}

用戶受權接口調用示例

1
2
3
4
5
6
7
AlipayClient alipayClient = new DefaultAlipayClient( "https://openapi.alipay.com/gateway.do" , APP_ID, APP_PRIVATE_KEY, "json" , CHARSET, ALIPAY_PUBLIC_KEY, "RSA2" );
//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.user.userinfo.share
AlipayUserUserinfoShareRequest request = new AlipayUserUserinfoShareRequest();
//受權類接口執行API調用時須要帶上accessToken
AlipayUserUserinfoShareResponse response= alipayClient.execute(request, "accessToken" );
//業務處理
//...

應用受權接口調用示例(ISV代理商戶調用)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
AlipayClient alipayClient = new DefaultAlipayClient( "https://openapi.alipay.com/gateway.do" , APP_ID, APP_PRIVATE_KEY, "json" , CHARSET, ALIPAY_PUBLIC_KEY, "RSA2" );
//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.open.public.template.message.industry.modify
AlipayOpenPublicTemplateMessageIndustryModifyRequest request = new AlipayOpenPublicTemplateMessageIndustryModifyRequest();
//SDK已經封裝掉了公共參數,這裏只須要傳入業務參數
//這次只是參數展現,未進行字符串轉義,實際狀況下請轉義
request.setBizContent( "  { " +
"    \"primary_industry_name\":\"IT科技/IT軟件與服務\"," +
"    \"primary_industry_code\":\"10001/20102\"," +
"    \"secondary_industry_code\":\"10001/20102\"," +
"    \"secondary_industry_name\":\"IT科技/IT軟件與服務\"" +
"  }" );
//ISV代理商戶調用須要傳入app_auth_token
request.putOtherTextParam( "app_auth_token" , "201511BBaaa6464f271f49e482f2e9fe63ca5F05" );
AlipayOpenPublicTemplateMessageIndustryModifyResponse response = alipayClient.execute(request);
//調用成功,則處理業務邏輯
if (response.isSuccess()){
     //.....
}

.netSDK集成示例

普通調用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IAopClient client = new DefaultAopClient( "https://openapi.alipay.com/gateway.do" , APPID, APP_PRIVATE_KEY, "json" , "1.0" , "RSA2" , ALIPAY_PUBLIC_KEY, CHARSET, false );
//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱如:alipay.open.public.template.message.industry.modify
AlipayOpenPublicTemplateMessageIndustryModifyRequest request = new AlipayOpenPublicTemplateMessageIndustryModifyRequest();
//SDK已經封裝掉了公共參數,這裏只須要傳入業務參數
//這次只是參數展現,未進行字符串轉義,實際狀況下請轉義
request.BizContent= "{" +
"    \"primary_industry_name\":\"IT科技/IT軟件與服務\"," +
"    \"primary_industry_code\":\"10001/20102\"," +
"    \"secondary_industry_code\":\"10001/20102\"," +
"    \"secondary_industry_name\":\"IT科技/IT軟件與服務\"" +
"  }" ;
AlipayOpenPublicTemplateMessageIndustryModifyResponse response = client.execute(request);
//調用成功,則處理業務邏輯
if (response.isSuccess()){
     //.....
}

圖片上傳接口調用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IAopClient client = new DefaultAopClient( "https://openapi.alipay.com/gateway.do" , APPID, APP_PRIVATE_KEY, "json" , "1.0" , "RSA2" , ALIPAY_PUBLIC_KEY, CHARSET, false );
// 實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.offline.material.image.upload
AlipayOfflineMaterialImageUploadRequest request = new AlipayOfflineMaterialImageUploadRequest();
request.setImageName( "test" );
//Windows請填寫絕對路徑,不支持相對路徑;Linux支持相對路徑
FileItem item = new FileItem( "C:/Downloads/ooopic_963991_7eea1f5426105f9e6069/16365_1271139700.jpg" );
request.setImageType( "JPG" );
request.setImageContent(item);
//執行API請求
AlipayOfflineMaterialImageUploadResponse response = alipayClient.execute(request);
//調用成功,則處理業務邏輯
if (response.isSuccess()){
      //獲取圖片訪問地址
     String imageUrl = response.getImageUrl();
     //.....
}

用戶受權接口調用示例

1
2
3
4
5
6
7
IAopClient client = new DefaultAopClient( "https://openapi.alipay.com/gateway.do" , APPID, APP_PRIVATE_KEY, "json" , "1.0" , "RSA2" , ALIPAY_PUBLIC_KEY, CHARSET, false );
//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.user.userinfo.share
AlipayUserUserinfoShareRequest request = new AlipayUserUserinfoShareRequest();
//受權類接口執行API調用時須要帶上accessToken
AlipayUserUserinfoShareResponse response= client.execute(req, "accessToken" );
//業務處理
//...

應用受權接口調用示例(ISV代理商戶調用)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IAopClient client = new DefaultAopClient( "https://openapi.alipay.com/gateway.do" , APPID, APP_PRIVATE_KEY, "json" , "1.0" , "RSA2" , ALIPAY_PUBLIC_KEY, CHARSET, false );
//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.open.public.template.message.industry.modify
AlipayOpenPublicTemplateMessageIndustryModifyRequest request = new AlipayOpenPublicTemplateMessageIndustryModifyRequest();
//SDK已經封裝掉了公共參數,這裏只須要傳入業務參數
//這次只是參數展現,未進行字符串轉義,實際狀況下請轉義
request.setBizContent( "  {" +
"    \"primary_industry_name\":\"IT科技/IT軟件與服務\"," +
"    \"primary_industry_code\":\"10001/20102\"," +
"    \"secondary_industry_code\":\"10001/20102\"," +
"    \"secondary_industry_name\":\"IT科技/IT軟件與服務\"" +
"  }" );
AlipayOpenPublicTemplateMessageIndustryModifyResponse response = client.execute(request, null , "app_auth_token" );
//調用成功,則處理業務邏輯
if (response.isSuccess()){
     //.....
}

phpSDK集成示例

普通調用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$c = new AopClient;
$c->appId = "app_id" ;
$c->rsaPrivateKey = '請填寫開發者私鑰去頭去尾去回車,一行字符串' ;
$c->format = "json" ;
$c->charset= "GBK" ;
$c->signType= "RSA2" ;
$c->alipayrsaPublicKey = '請填寫支付寶公鑰,一行字符串' ;
//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.open.public.template.message.industry.modify
$request = new AlipayOpenPublicTemplateMessageIndustryModifyRequest();
//SDK已經封裝掉了公共參數,這裏只須要傳入業務參數
//這次只是參數展現,未進行字符串轉義,實際狀況下請轉義
$request->bizContent = "{" +
"    \"primary_industry_name\":\"IT科技/IT軟件與服務\"," +
"    \"primary_industry_code\":\"10001/20102\"," +
"    \"secondary_industry_code\":\"10001/20102\"," +
"    \"secondary_industry_name\":\"IT科技/IT軟件與服務\"" +
" }" ;
$response= $c->execute($request);

圖片上傳接口調用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$c = new AopClient;
$c->appId = "app_id" ;
$c->rsaPrivateKey = '請填寫開發者私鑰去頭去尾去回車,一行字符串' ;
$c->format = "json" ;
$c->charset = "GBK" ;
$c->signType= "RSA2" ;
$c->alipayrsaPublicKey = '請填寫支付寶公鑰,一行字符串' ;
//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.offline.material.image.upload
$request = new AlipayOfflineMaterialImageUploadRequest();
$request->setImageName( "測試文件" );
$request->setImageType( "jpg" );
//Windows請填寫絕對路徑,不支持相對路徑;Linux支持相對路徑
$request->setImageContent( "@" . "本地文件路徑" );
$response = $c->execute($request);
//獲取圖片地址
$response->getImageUrl();

用戶受權接口調用示例

1
2
3
4
5
6
7
8
9
10
11
12
$c = new AopClient;
$c->appId = "app_id" ;
$c->rsaPrivateKey = '請填寫開發者私鑰去頭去尾去回車,一行字符串' ;
$c->format = "json" ;
$c->charset = "GBK" ;
$c->signType= "RSA2" ;
$c->alipayrsaPublicKey = '請填寫支付寶公鑰,一行字符串' ;
//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.user.userinfo.share
$request= new AlipayUserUserinfoShareRequest();
//受權類接口執行API調用時須要帶上accessToken
$response= $c->execute($request, "accessToken" );

應用受權接口調用示例(ISV代理商戶調用)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$c = new AopClient;
$c->appId = "app_id" ;
$c->rsaPrivateKey = '請填寫開發者私鑰去頭去尾去回車,一行字符串' ;
$c->format = "json" ;
$c->charset = "GBK" ;
$c->signType= "RSA2" ;
$c->alipayrsaPublicKey = '請填寫支付寶公鑰,一行字符串' ;
##實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.open. public .template.message.industry.modify
$request = new AlipayOpenPublicTemplateMessageIndustryModifyRequest();
//SDK已經封裝掉了公共參數,這裏只須要傳入業務參數
//這次只是參數展現,未進行字符串轉義,實際狀況下請轉義
$request->bizContent = "{" +
"    \"primary_industry_name\":\"IT科技/IT軟件與服務\"," +
"    \"primary_industry_code\":\"10001/20102\"," +
"    \"secondary_industry_code\":\"10001/20102\"," +
"    \"secondary_industry_name\":\"IT科技/IT軟件與服務\"" +
"  }" ;
//ISV代理商戶調用須要傳入app_auth_token
$response= $c->execute($request,NULL, "app_auth_token" );

方法說明

加簽方法(若是不用SDK調用,推薦用該方法加簽)

1
2
3
4
5
6
7
/**
@param content 待簽名字符串
@param privateKey 加簽私鑰
@param charset 加簽字符集
@param sign_type 簽名方式
**/
String AlipaySignature.rsaSign(String content, String privateKey, String charset, String sign_type)

驗籤方法(例如異步通知的時候,用戶須要用到驗籤方法)

驗籤方法,根據接口不一樣,驗籤時會去掉sign_type(rsaCheckV1)或者保留sign_type(rsaCheckV2)。

1
2
3
4
5
6
7
8
9
10
11
12
13
/**    此方法會去掉sign_type作驗籤,暫時除生活號(原服務窗)激活開發者模式外都使用V1。
@param params 參數列表(包括待驗籤參數和簽名值sign) key-參數名稱 value-參數值
@param publicKey 驗籤公鑰
@param charset 驗簽字符集
**/
boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
 
/**    此方法不會去掉sign_type驗籤,用於生活號(原服務窗)激活開發者模式
@param params 參數列表(包括待驗籤參數和簽名值sign) key-參數名稱 value-參數值
@param publicKey 驗籤公鑰
@param charset 驗簽字符集
**/
boolean AlipaySignature.rsaCheckV2(Map<String, String> params, String publicKey, String charset, String sign_type)

注意事項

    • AlipayClient的實現類都是線程安全的,因此沒有必要每次API請求都新建一個AlipayClient實現類;
    • 建立AlipayClient實現類的實例時,指定format=json,相比xml格式,能夠減小數據傳輸量,提高API請求效率。
相關文章
相關標籤/搜索