天天看點

位元組跳動小程式支付

實作流程:

背景建立訂單>調用支付寶生成支付寶參數 >拼接組合頭條需要參數>傳回前端調用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、檢查是否簽約,并且添加功能; 

調起支付寶過程中的相應錯誤可以去支付寶找解決方案

繼續閱讀