實作流程:
背景建立訂單>調用支付寶生成支付寶參數 >拼接組合頭條需要參數>傳回前端調用requestPayment>支付成功
1.背景業務處理,生成訂單号和金額
2.調用支付寶app支付接口 https://docs.open.alipay.com/204/105465/
支付寶sdk下載下傳位址 https://docs.open.alipay.com/54/106370/
c#代碼示例:
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.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已經封裝掉了公共參數,這裡隻需要傳入業務參數。以下方法為sdk的model入參方式(model和biz_content同時存在的情況下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.Body = "我是測試資料";
model.Subject = "App支付測試DoNet";
model.TotalAmount = "0.01";
model.ProductCode = "QUICK_MSECURITY_PAY";
model.OutTradeNo = "20170216test01";
model.TimeoutExpress = "30m";
request.SetBizModel(model);
request.SetNotifyUrl("外網商戶可以通路的異步位址");
//這裡和普通的接口調用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = client.SdkExecute(request);
//HttpUtility.HtmlEncode是為了輸出到頁面時防止被浏覽器将關鍵參數html轉義,實際列印到日志以及http傳輸不會有這個問題
Response.Write(HttpUtility.HtmlEncode(response.Body));
//頁面輸出的response.Body就是orderString 可以直接給用戶端請求,無需再做處理。
3.拼接組合頭條需要參數
采用排序的Dictionary的好處是友善對資料包進行簽名,不用再簽名之前再做一次排序
Dictionary<string, string> data = new Dictionary<string, string>();
data["app_id"] = app_id;
data["sign_type"] = "MD5";
data["timestamp"] = timestamp;
data["trade_no"] = 訂單号;
data["merchant_id"] = merchant_id;
data["uid"] = uid;
data["total_amount"] = 金額;
data["params"] = "{\"url\":\"" + response.Body + "\"}";
//排序
string PrepareSign = getParamSrc(data, false);
//md5簽名
data["sign"] = MakeSign(PrepareSign, ttSecret);
data["method"] = "tp.trade.confirm";
data["pay_channel"] = "ALIPAY_NO_SIGN";
data["pay_type"] = "ALIPAY_APP";
data["risk_info"] = "{\"ip\":" + 擷取Ip位址+ "}";
//data傳回給前端調用
4.前端調用 http://developer.toutiao.com/docs/open/requestPayment.html
requestPayment 發起頭條支付的方法,根據後端傳回參數調用支付寶支付
5.使用者支付完成,回調可以加支付處理記得去支付寶驗證支付狀态,支付寶回調記得處理
注意事項:
ALIN10146
1、請求appid應用未上線,聯調時請確定自己的應用是上線狀态;
2、簽約權限問題,請確定自己已經簽約并稽核通過;
3、簽名類型使用錯,2018年1月5号之後建立的應用類型請使用RSA2,sign_type=RSA2;
4、請求參數問題,請檢查自己的請求參數格式是否按照文檔要求傳輸的。
ALI38173
報錯描述:報錯ALI 38173
報錯原因:
1、請求參數問題
2、密鑰問題
3、亂碼問題
4、沒有簽約該接口
解決方案:
1、檢查請求參數中是否多了 “amp;”,将其去掉重新測試;
2、檢查參數是否與文檔不符之處,是否有傳自定義參數,或者必傳參數未傳;
3.檢查密鑰格式是否正确:java使用pkcs8格式密鑰,非java語言,必須使用pkcs1格式密鑰;
4、檢查公私鑰是否比對;
5、編碼格式是否有誤,是否有亂碼;
6、檢查是否簽約,并且添加功能;
調起支付寶過程中的相應錯誤可以去支付寶找解決方案