用戶已安裝支付寶支付流程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+支付寶」,並將做爲審覈依據。
要在您的應用中使用支付寶開放產品的接口能力,您須要先去螞蟻金服開放平臺(open.alipay.com),在開發者中心中建立登記您的應用,並提交審覈,審覈經過後會爲您生成應用惟一標識(APPID),而且能夠申請開通開放產品使用權限,經過APPID您的應用才能調用開放產品的接口能力。須要詳細瞭解開放平臺建立應用步驟請參考《開放平臺應用建立指南》。
開發者調用接口前須要先生成RSA密鑰,RSA密鑰包含應用私鑰(APP_PRIVATE_KEY)、應用公鑰(APP_PUBLIC_KEY)。生成密鑰後在開放平臺開發者中心進行密鑰配置,配置完成後能夠獲取支付寶公鑰(ALIPAY_PUBLIC_KEY)。詳細步驟請參考《配置應用環境》。
爲了幫助開發者調用開放接口,咱們提供了開放平臺服務端SDK,包含JAVA、PHP和.NET三語言版本,封裝了簽名&驗籤、HTTP接口請求等基礎功能。請先下載對應語言版本的SDK並引入您的開發工程。
各語言版本服務端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對象。
手機網站支付產品包含兩類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。
特別注意:
手機網站支付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.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 urlStr =
"http://dwbillcenter.alipay.com/downloadBillFile.resource?bizType=X&userId=X&fileType=X&bizDates=X&downloadFileName=X&fileId=X"
;
//指定但願保存的文件路徑
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以上的開發環境 |
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"
);
//業務處理
//...
|
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()){
//.....
}
|
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"
);
//業務處理
//...
|
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()){
//.....
}
|
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"
);
|
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"
);
|
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)
|