支付寶 App支付服務(wù)端DEMO&SDK

2018-10-26 16:14 更新

SDK獲取

開(kāi)發(fā)語(yǔ)言 資源下載 環(huán)境要求
JAVA版資源 SDK1.5 適用于Java語(yǔ)言、jdk版本1.5及以上的開(kāi)發(fā)環(huán)境
.NET版資源 SDK 適用于Visual studio 2010及以上版本、Framework3.5及以上版本的開(kāi)發(fā)環(huán)境
PHP版資源 SDK 適用于php5.5以上的開(kāi)發(fā)環(huán)境

TIPS:以下代碼示例僅供參考和測(cè)試,實(shí)際請(qǐng)根據(jù)業(yè)務(wù)來(lái)處理。異步通知處理過(guò)程中請(qǐng)對(duì)信息做確認(rèn),例如:訂單號(hào)是否在商戶您的系統(tǒng)中存在,訂單金額是否匹配

APP支付文檔

文檔名稱(chēng) 文檔鏈接
APP支付接口文檔 查看文檔

JAVA服務(wù)端SDK生成APP支付訂單信息示例

//實(shí)例化客戶端
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
//實(shí)例化具體API對(duì)應(yīng)的request類(lèi),類(lèi)名稱(chēng)和接口名稱(chēng)對(duì)應(yīng),當(dāng)前調(diào)用接口名稱(chēng):alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已經(jīng)封裝掉了公共參數(shù),這里只需要傳入業(yè)務(wù)參數(shù)。以下方法為sdk的model入?yún)⒎绞?model和biz_content同時(shí)存在的情況下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody("我是測(cè)試數(shù)據(jù)");
model.setSubject("App支付測(cè)試Java");
model.setOutTradeNo(outtradeno);
model.setTimeoutExpress("30m");
model.setTotalAmount("0.01");
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
request.setNotifyUrl("商戶外網(wǎng)可以訪問(wèn)的異步地址");
try {
        //這里和普通的接口調(diào)用不同,使用的是sdkExecute
        AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
        System.out.println(response.getBody());//就是orderString 可以直接給客戶端請(qǐng)求,無(wú)需再做處理。
    } catch (AlipayApiException e) {
        e.printStackTrace();
}

JAVA服務(wù)端驗(yàn)證異步通知信息參數(shù)示例

//獲取支付寶POST過(guò)來(lái)反饋信息
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] + ",";
    }
    //亂碼解決,這段代碼在出現(xiàn)亂碼時(shí)使用。
    //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
    params.put(name, valueStr);
}
//切記alipaypublickey是支付寶的公鑰,請(qǐng)去open.alipay.com對(duì)應(yīng)應(yīng)用下查看。
//boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
boolean flag = AlipaySignature.rsaCheckV1(params, alipaypublicKey, charset,"RSA2")

PHP服務(wù)端SDK生成APP支付訂單信息示例

$aop = new AopClient;
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$aop->appId = "app_id";
$aop->rsaPrivateKey = '請(qǐng)?zhí)顚?xiě)開(kāi)發(fā)者私鑰去頭去尾去回車(chē),一行字符串';
$aop->format = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA2";
$aop->alipayrsaPublicKey = '請(qǐng)?zhí)顚?xiě)支付寶公鑰,一行字符串';
//實(shí)例化具體API對(duì)應(yīng)的request類(lèi),類(lèi)名稱(chēng)和接口名稱(chēng)對(duì)應(yīng),當(dāng)前調(diào)用接口名稱(chēng):alipay.trade.app.pay
$request = new AlipayTradeAppPayRequest();
//SDK已經(jīng)封裝掉了公共參數(shù),這里只需要傳入業(yè)務(wù)參數(shù)
$bizcontent = "{\"body\":\"我是測(cè)試數(shù)據(jù)\"," 
                . "\"subject\": \"App支付測(cè)試\","
                . "\"out_trade_no\": \"20170125test01\","
                . "\"timeout_express\": \"30m\"," 
                . "\"total_amount\": \"0.01\","
                . "\"product_code\":\"QUICK_MSECURITY_PAY\""
                . "}";
$request->setNotifyUrl("商戶外網(wǎng)可以訪問(wèn)的異步地址");
$request->setBizContent($bizcontent);
//這里和普通的接口調(diào)用不同,使用的是sdkExecute
$response = $aop->sdkExecute($request);
//htmlspecialchars是為了輸出到頁(yè)面時(shí)防止被瀏覽器將關(guān)鍵參數(shù)html轉(zhuǎn)義,實(shí)際打印到日志以及http傳輸不會(huì)有這個(gè)問(wèn)題
echo htmlspecialchars($response);//就是orderString 可以直接給客戶端請(qǐng)求,無(wú)需再做處理。

PHP服務(wù)端驗(yàn)證異步通知信息參數(shù)示例

$aop = new AopClient;
$aop->alipayrsaPublicKey = '請(qǐng)?zhí)顚?xiě)支付寶公鑰,一行字符串';
$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");

.NET服務(wù)端SDK生成APP支付訂單信息示例

IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", APPID, APP_PRIVATE_KEY, "json", "1.0", "RSA2", ALIPAY_PUBLIC_KEY, CHARSET, false);
//實(shí)例化具體API對(duì)應(yīng)的request類(lèi),類(lèi)名稱(chēng)和接口名稱(chēng)對(duì)應(yīng),當(dāng)前調(diào)用接口名稱(chēng)如:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已經(jīng)封裝掉了公共參數(shù),這里只需要傳入業(yè)務(wù)參數(shù)。以下方法為sdk的model入?yún)⒎绞?model和biz_content同時(shí)存在的情況下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.Body = "我是測(cè)試數(shù)據(jù)";
model.Subject = "App支付測(cè)試DoNet";
model.TotalAmount = "0.01";
model.ProductCode = "QUICK_MSECURITY_PAY";
model.OutTradeNo = "20170216test01";
model.TimeoutExpress = "30m";
request.SetBizModel(model);
request.SetNotifyUrl("外網(wǎng)商戶可以訪問(wèn)的異步地址");
//這里和普通的接口調(diào)用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = client.SdkExecute(request);
//HttpUtility.HtmlEncode是為了輸出到頁(yè)面時(shí)防止被瀏覽器將關(guān)鍵參數(shù)html轉(zhuǎn)義,實(shí)際打印到日志以及http傳輸不會(huì)有這個(gè)問(wèn)題
Response.Write(HttpUtility.HtmlEncode(response.Body));
//頁(yè)面輸出的response.Body就是orderString 可以直接給客戶端請(qǐng)求,無(wú)需再做處理。

.NET服務(wù)端驗(yàn)證異步通知信息參數(shù)示例

/// 獲取支付寶POST過(guò)來(lái)通知消息,并以“參數(shù)名=參數(shù)值”的形式組成數(shù)組 
/// request回來(lái)的信息組成的數(shù)組
public Dictionary<string, string> GetRequestPost()
{
    int i = 0;
    IDictionary<string, string> sArray = new IDictionary<string, string>();
    NameValueCollection coll;
    //Load Form variables into NameValueCollection variable.
    coll = Request.Form;

 
    // Get names of all forms into a string array.
    String[] requestItem = coll.AllKeys;

 
    for (i = 0; i < requestItem.Length; i++)
    {
        sArray.Add(requestItem[i], Request.Form[requestItem[i]]);
     }

 
     return sArray;
}
//切記alipaypublickey是支付寶的公鑰,請(qǐng)去open.alipay.com對(duì)應(yīng)應(yīng)用下查看。
//bool RSACheckV1(IDictionary<string, string> parameters, string alipaypublicKey, string charset, string signType, bool keyFromFile)
bool flag = AlipaySignature.RSACheckV1(GetRequestPost(), alipaypublicKey, charset, "RSA2", false);
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)