## PHP SDK 集成示例
### 普通調用示例
~~~php
$c = new AopClient;
$c->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$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->setBizContent = "{" .
" \"primary_industry_name\":\"IT科技/IT軟件與服務\"," .
" \"primary_industry_code\":\"10001/20102\"," .
" \"secondary_industry_code\":\"10001/20102\"," .
" \"secondary_industry_name\":\"IT科技/IT軟件與服務\"" .
" }";
$response= $c->execute($request);
~~~
### 普通調用示例(證書)
~~~php
$c = new AopCertClient;
$appCertPath = "應用證書路徑(要確保證書文件可讀),例如:/home/admin/cert/appCertPublicKey.crt";
$alipayCertPath = "支付寶公鑰證書路徑(要確保證書文件可讀),例如:/home/admin/cert/alipayCertPublicKey_RSA2.crt";
$rootCertPath = "支付寶根證書路徑(要確保證書文件可讀),例如:/home/admin/cert/alipayRootCert.crt";
$c->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$c->appId = "app_id";
$c->rsaPrivateKey = '請填寫開發者私鑰去頭去尾去回車,一行字符串' ;
$c->format = "json";
$c->charset= "GBK";
$c->signType= "RSA2";
//調用getPublicKey從支付寶公鑰證書中提取公鑰
$c->alipayrsaPublicKey = $c->getPublicKey($alipayCertPath);
//是否校驗自動下載的支付寶公鑰證書,如果開啟校驗要保證支付寶根證書在有效期內
$c->isCheckAlipayPublicCert = true;
//調用getCertSN獲取證書序列號
$c->appCertSN = $c->getCertSN($appCertPath);
//調用getRootCertSN獲取支付寶根證書序列號
$c->alipayRootCertSN = $c->getRootCertSN($rootCertPath);
//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.open.public.template.message.industry.modify
$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軟件與服務\"" .
" }";
$response= $c->execute($request);
~~~
### 圖片上傳接口調用示例
~~~php
$c = new AopClient;
$c->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$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();
~~~
### 圖片上傳接口調用示例(證書)
~~~php
$c = new AopCertClient;
$appCertPath = "應用證書路徑(要確保證書文件可讀),例如:/home/admin/cert/appCertPublicKey.crt";
$alipayCertPath = "支付寶公鑰證書路徑(要確保證書文件可讀),例如:/home/admin/cert/alipayCertPublicKey_RSA2.crt";
$rootCertPath = "支付寶根證書路徑(要確保證書文件可讀),例如:/home/admin/cert/alipayRootCert.crt";
$c->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$c->appId = "app_id";
$c->rsaPrivateKey = '請填寫開發者私鑰去頭去尾去回車,一行字符串' ;
$c->format = "json";
$c->charset = "GBK";
$c->signType= "RSA2";
//調用getPublicKey從支付寶公鑰證書中提取公鑰
$c->alipayrsaPublicKey = $c->getPublicKey($alipayCertPath);
//是否校驗自動下載的支付寶公鑰證書,如果開啟校驗要保證支付寶根證書在有效期內
$c->isCheckAlipayPublicCert = true;
//調用getCertSN獲取證書序列號
$c->appCertSN = $c->getCertSN($appCertPath);
//調用getRootCertSN獲取支付寶根證書序列號
$c->alipayRootCertSN = $c->getRootCertSN($rootCertPath);
//實例化具體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();
~~~
### 用戶授權接口調用示例
~~~php
$c = new AopClient;
$c->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$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");
~~~
### 用戶授權接口調用示例(證書)
~~~php
$c = new AopCertClient;
$appCertPath = "應用證書路徑(要確保證書文件可讀),例如:/home/admin/cert/appCertPublicKey.crt";
$alipayCertPath = "支付寶公鑰證書路徑(要確保證書文件可讀),例如:/home/admin/cert/alipayCertPublicKey_RSA2.crt";
$rootCertPath = "支付寶根證書路徑(要確保證書文件可讀),例如:/home/admin/cert/alipayRootCert.crt";
$c->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$c->appId = "app_id";
$c->rsaPrivateKey = '請填寫開發者私鑰去頭去尾去回車,一行字符串' ;
$c->format = "json";
$c->charset = "GBK";
$c->signType= "RSA2";
//調用getPublicKey從支付寶公鑰證書中提取公鑰
$c->alipayrsaPublicKey = $c->getPublicKey($alipayCertPath);
//是否校驗自動下載的支付寶公鑰證書,如果開啟校驗要保證支付寶根證書在有效期內
$c->isCheckAlipayPublicCert = true;
//調用getCertSN獲取證書序列號
$c->appCertSN = $c->getCertSN($appCertPath);
//調用getRootCertSN獲取支付寶根證書序列號
$c->alipayRootCertSN = $c->getRootCertSN($rootCertPath);
//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.user.userinfo.share
$request= new AlipayUserUserinfoShareRequest();
//授權類接口執行API調用時需要帶上accessToken
$response= $c->execute($request,"accessToken");
~~~
### 應用授權接口調用示例(ISV 代理商戶調用)
~~~php
$c = new AopClient;
$c->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$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");
~~~
### 應用授權接口調用示例(ISV 代理商戶調用)(證書)
~~~php
$c = new AopCertClient;
$appCertPath = "應用證書路徑(要確保證書文件可讀),例如:/home/admin/cert/appCertPublicKey.crt";
$alipayCertPath = "支付寶公鑰證書路徑(要確保證書文件可讀),例如:/home/admin/cert/alipayCertPublicKey_RSA2.crt";
$rootCertPath = "支付寶根證書路徑(要確保證書文件可讀),例如:/home/admin/cert/alipayRootCert.crt";
$c->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$c->appId = "app_id";
$c->rsaPrivateKey = '請填寫開發者私鑰去頭去尾去回車,一行字符串' ;
$c->format = "json";
$c->charset = "GBK";
$c->signType= "RSA2";
//調用getPublicKey從支付寶公鑰證書中提取公鑰
$c->alipayrsaPublicKey = $c->getPublicKey($alipayCertPath);
//是否校驗自動下載的支付寶公鑰證書,如果開啟校驗要保證支付寶根證書在有效期內
$c->isCheckAlipayPublicCert = true;
//調用getCertSN獲取證書序列號
$c->appCertSN = $c->getCertSN($appCertPath);
//調用getRootCertSN獲取支付寶根證書序列號
$c->alipayRootCertSN = $c->getRootCertSN($rootCertPath);
## 實例化具體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");
~~~
## Python SDK 集成示例
### 普通調用示例
~~~php
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
from alipay.aop.api.AlipayClientConfig import AlipayClientConfig
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
from alipay.aop.api.domain.AlipayTradeCreateModel import AlipayTradeCreateModel
from alipay.aop.api.request.AlipayTradeCreateRequest import AlipayTradeCreateRequest
from alipay.aop.api.response.AlipayTradeCreateResponse import AlipayTradeCreateResponse
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(message)s',
filemode='a',)
logger = logging.getLogger('')
if __name__ == '__main__':
# 實例化客戶端
alipay_client_config = AlipayClientConfig()
alipay_client_config.server_url = 'https://openapi.alipaydev.com/gateway.do'
alipay_client_config.app_id = '請填寫appi_id'
alipay_client_config.app_private_key = '請填寫開發者私鑰去頭去尾去回車,單行字符串'
alipay_client_config.alipay_public_key = '請填寫支付寶公鑰,單行字符串'
client = DefaultAlipayClient(alipay_client_config, logger)
# 構造請求參數對象
model = AlipayTradeCreateModel()
model.out_trade_no = "20150320010101001";
model.total_amount = "88.88";
model.subject = "Iphone6 16G";
model.buyer_id = "2088102177846880";
request = AlipayTradeCreateRequest(biz_model=model)
# 執行API調用
try:
response_content = client.execute(request)
except Exception as e:
print(traceback.format_exc())
if not response_content:
print("failed execute")
else:
# 解析響應結果
response = AlipayTradeCreateResponse()
response.parse_response_content(response_content)
# 響應成功的業務處理
if response.is_success():
# 如果業務成功,可以通過response屬性獲取需要的值
print("get response trade_no:" + response.trade_no)
# 響應失敗的業務處理
else:
# 如果業務失敗,可以從錯誤碼中可以得知錯誤情況,具體錯誤碼信息可以查看接口文檔
print(response.code + "," + response.msg + "," + response.sub_code + "," + response.sub_msg)
~~~
### 圖片上傳接口調用示例
~~~php
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
from alipay.aop.api.AlipayClientConfig import AlipayClientConfig
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
from alipay.aop.api.FileItem import FileItem
from alipay.aop.api.request.AlipayOfflineMaterialImageUploadRequest import AlipayOfflineMaterialImageUploadRequest
from alipay.aop.api.response.AlipayOfflineMaterialImageUploadResponse import AlipayOfflineMaterialImageUploadResponse
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(message)s',
filemode='a',)
logger = logging.getLogger('')
if __name__ == '__main__':
# 實例化客戶端
alipay_client_config = AlipayClientConfig()
alipay_client_config.server_url = 'https://openapi.alipaydev.com/gateway.do'
alipay_client_config.app_id = '請填寫appi_id'
alipay_client_config.app_private_key = '請填寫開發者私鑰去頭去尾去回車,單行字符串'
alipay_client_config.alipay_public_key = '請填寫支付寶公鑰,單行字符串'
client = DefaultAlipayClient(alipay_client_config, logger)
# 構造請求參數對象
request = AlipayOfflineMaterialImageUploadRequest()
request.image_name = "我的店"
request.image_type = "jpg"
file = open("/Users/foo/Downloads/test.jpg", "rb")
request.image_content = FileItem(file_name="test.jpg", file_content=file.read())
file.close()
# 執行API調用
try:
response_content = client.execute(request)
except Exception as e:
print(traceback.format_exc())
if not response_content:
print("failed execute")
else:
# 解析響應結果
response = AlipayOfflineMaterialImageUploadResponse()
response.parse_response_content(response_content)
# 響應成功的業務處理
if response.is_success():
# 如果業務成功,可以通過response屬性獲取需要的值
print("get response image_url:" + response.image_url)
# 響應失敗的業務處理
else:
# 如果業務失敗,可以從錯誤碼中可以得知錯誤情況,具體錯誤碼信息可以查看接口文檔
print(response.code + "," + response.msg + "," + response.sub_code + "," + response.sub_msg)
~~~
### 用戶授權接口調用示例
~~~php
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
from alipay.aop.api.AlipayClientConfig import AlipayClientConfig
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
from alipay.aop.api.constant.ParamConstants import *
from alipay.aop.api.domain.AlipayEbppInvoiceTitleListGetModel import AlipayEbppInvoiceTitleListGetModel
from alipay.aop.api.request.AlipayEbppInvoiceTitleListGetRequest import AlipayEbppInvoiceTitleListGetRequest
from alipay.aop.api.response.AlipayEbppInvoiceTitleListGetResponse import AlipayEbppInvoiceTitleListGetResponse
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(message)s',
filemode='a',)
logger = logging.getLogger('')
if __name__ == '__main__':
# 實例化客戶端
alipay_client_config = AlipayClientConfig()
alipay_client_config.server_url = 'https://openapi.alipaydev.com/gateway.do'
alipay_client_config.app_id = '請填寫appi_id'
alipay_client_config.app_private_key = '請填寫開發者私鑰去頭去尾去回車,單行字符串'
alipay_client_config.alipay_public_key = '請填寫支付寶公鑰,單行字符串'
client = DefaultAlipayClient(alipay_client_config, logger)
# 構造請求參數對象
model = AlipayEbppInvoiceTitleListGetModel()
model.user_id = "2088102177492087"
request = AlipayEbppInvoiceTitleListGetRequest(biz_model=model)
# 添加auth_token
udf_params = dict()
udf_params[P_AUTH_TOKEN] = "auth_token,使用時替換成正確的token"
request.udf_params = udf_params
# 執行API調用
try:
response_content = client.execute(request)
except Exception as e:
print(traceback.format_exc())
if not response_content:
print("failed execute")
else:
# 解析響應結果
response = AlipayEbppInvoiceTitleListGetResponse()
response.parse_response_content(response_content)
# 響應成功的業務處理
if response.is_success():
# 如果業務成功,可以通過response屬性獲取需要的值
print("get response trade_no:" + response.trade_no)
# 響應失敗的業務處理
else:
# 如果業務失敗,可以從錯誤碼中可以得知錯誤情況,具體錯誤碼信息可以查看接口文檔
print(response.code + "," + response.msg + "," + response.sub_code + "," + response.sub_msg)
~~~
### 應用授權接口調用示例(ISV 代理商戶調用)
~~~php
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
from alipay.aop.api.AlipayClientConfig import AlipayClientConfig
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
from alipay.aop.api.constant.ParamConstants import *
from alipay.aop.api.domain.AlipayTradeCreateModel import AlipayTradeCreateModel
from alipay.aop.api.request.AlipayTradeCreateRequest import AlipayTradeCreateRequest
from alipay.aop.api.response.AlipayTradeCreateResponse import AlipayTradeCreateResponse
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(message)s',
filemode='a',)
logger = logging.getLogger('')
if __name__ == '__main__':
# 實例化客戶端
alipay_client_config = AlipayClientConfig()
alipay_client_config.server_url = 'https://openapi.alipaydev.com/gateway.do'
alipay_client_config.app_id = '請填寫appi_id'
alipay_client_config.app_private_key = '請填寫開發者私鑰去頭去尾去回車,單行字符串'
alipay_client_config.alipay_public_key = '請填寫支付寶公鑰,單行字符串'
client = DefaultAlipayClient(alipay_client_config, logger)
# 構造請求參數對象
model = AlipayTradeCreateModel()
model.out_trade_no = "20150320010101001";
model.total_amount = "88.88";
model.subject = "Iphone6 16G";
model.buyer_id = "2088102177846880";
request = AlipayTradeCreateRequest(biz_model=model)
# 添加app_auth_token
udf_params = dict()
udf_params[P_APP_AUTH_TOKEN] = "app_auth_token,使用時替換成正確的token"
request.udf_params = udf_params
# 執行API調用
try:
response_content = client.execute(request)
except Exception as e:
print(traceback.format_exc())
if not response_content:
print("failed execute")
else:
# 解析響應結果
response = AlipayTradeCreateResponse()
response.parse_response_content(response_content)
# 響應成功的業務處理
if response.is_success():
# 如果業務成功,可以通過response屬性獲取需要的值
print("get response trade_no:" + response.trade_no)
# 響應失敗的業務處理
else:
# 如果業務失敗,可以從錯誤碼中可以得知錯誤情況,具體錯誤碼信息可以查看接口文檔
print(response.code + "," + response.msg + "," + response.sub_code + "," + response.sub_msg)
~~~
## 簽名方法
### 加簽方法(如果不用 SDK 調用,推薦用該方法加簽)
~~~java
/**
@param content 待簽名字符串
@param privateKey 加簽私鑰
@param charset 加簽字符集
@param signType 簽名方式
**/
String AlipaySignature.rsaSign(String content, String privateKey, String charset, String signType);
~~~
### 驗簽方法(例如異步通知的時候,用戶需要用到驗簽方法)
驗簽方法,根據接口不同,驗簽時會去掉 sign\_type(rsaCheckV1) 或者保留 sign\_type(rsaCheckV2)。
~~~java
/** 此方法會去掉sign_type做驗簽,暫時除生活號(原服務窗)激活開發者模式外都使用V1。
@param params 參數列表(包括待驗簽參數和簽名值sign) key-參數名稱 value-參數值
@param publicKey 驗簽支付寶公鑰
@param charset 驗簽字符集
@param sign_type 驗簽方式(RSA或RSA2)
**/
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 驗簽字符集
@param sign_type 驗簽方式(RSA或RSA2)
**/
boolean AlipaySignature.rsaCheckV2(Map<String, String> params, String publicKey, String charset, String sign_type)
/** 此方法會去掉sign_type做驗簽,暫時除生活號(原服務窗)激活開發者模式外都使用V1。
@param params 參數列表(包括待驗簽參數和簽名值sign) key-參數名稱 value-參數值
@param publicKeyCertPath 驗簽支付寶公鑰證書文件路徑
@param charset 驗簽字符集
@param sign_type 驗簽方式(RSA或RSA2)
**/
boolean AlipaySignature.rsaCertCheckV1(Map<String, String> params, String publicKeyCertPath,
String charset,String signType)
/** 此方法不會去掉sign_type驗簽,用于生活號(原服務窗)激活開發者模式
@param params 參數列表(包括待驗簽參數和簽名值sign) key-參數名稱 value-參數值
@param publicKeyCertPath 驗簽支付寶公鑰證書文件路徑
@param charset 驗簽字符集
@param sign_type 驗簽方式(RSA或RSA2)
**/
boolean AlipaySignature.rsaCertCheckV2(Map<String, String> params, String alipayPublicCertPath,
String charset,String signType)
~~~
**注意事項**
* AlipayClient 的實現類都是線程安全的,所以沒有必要每次 API 請求都新建一個 AlipayClient 實現類;
* 創建 AlipayClient 實現類的實例時,指定 format=json,相比 xml 格式,可以減少數據傳輸量,提升 API 請求效率。