本文簡述如何在Smobiler中調用支付寶支付。
Step 1. 建立一個窗體,并在窗體中拖入Button,Label,AliPay等控件,布局如下:
Step 2. 代碼
在窗體中聲明變量
//訂單編号
private string tradeNo;
//支付寶應用編号,此應用必須簽約 APP支付(請從支付寶開發者平台擷取)
private string appid = "************";
//應用的私鑰
private string appPrivateKey = "****************************";
//應用的支付寶公鑰
private string aliPublicKey = "************************";
//阿裡支付網關
private string aliOpenAPI = "https://openapi.alipay.com/gateway.do";
【生成訂單編号】按鈕點選事件代碼:
private void btnOutOrder_Press(object sender, EventArgs e)
{
tradeNo = "SMOAPP" + DateTime.Now.ToString("yyyyMMddHHmmss");
this.labOutOrder.Text = tradeNo;
}
【建立訂單】按鈕的點選事件代碼如下:
private void btnCreateOrder_Press(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(tradeNo) == true)
{
btnOutOrder_Press(null, null); //生成訂單編号
}
IAopClient client = GetAPOClient();
//執行個體化具體API對應的request類,類名稱和接口名稱對應,目前調用接口名稱如:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已經封裝掉了公共參數,這裡隻需要傳入業務參數。以下方法為sdk的model入參方式(model和biz_content同時存在的情況下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.Body = "請支援0.01元"; //支付描述
model.Subject = "支付"; //支付标題
model.TotalAmount = "0.01"; //支付金額
model.ProductCode = "QUICK_MSECURITY_PAY"; //産品碼
model.OutTradeNo = tradeNo; //外部編号,外部編号在支付成功時,隻能使用一次
model.TimeoutExpress = "30m"; //逾時時間
request.SetBizModel(model);
//有條件可設定回調位址,支付寶在支付完成後會POST此位址。或通過查詢的方式。
//request.SetNotifyUrl("");
//這裡和普通的接口調用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = client.SdkExecute(request);
//頁面輸出的response.Body就是orderString 可以直接給用戶端請求,無需再做處理。
System.Diagnostics.Debug.WriteLine(response.Body);
//注意,第一個參數是蘋果支付需要的格式為ap應用編号,android可設定為空
this.aliPay1.AppPay("ap" + appid, response.Body, (obj, args) =>
{
if (args.isError == true)
{
MessageBox.Show(args.error);
}
else
{
string result = "";
//foreach (KeyValuePair<string, object> item in args.result)
//{
// result += string.Format("{0}/{1}" + Environment.NewLine, item.Key, item.Value);
//}
MessageBox.Show(result);
}
});
}
【支付狀态查詢】按鈕點選事件代碼:
private void btnOrderStatus_Press(object sender, EventArgs e)
{
IAopClient client = GetAPOClient();
//執行個體化具體API對應的request類,類名稱和接口名稱對應,目前調用接口名稱如:alipay.trade.app.pay
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
//SDK已經封裝掉了公共參數,這裡隻需要傳入業務參數。以下方法為sdk的model入參方式(model和biz_content同時存在的情況下取biz_content)。
AlipayTradeQueryModel model = new AlipayTradeQueryModel();
model.OutTradeNo = tradeNo;
request.SetBizModel(model);
//這是普通的接口使用Execute
AlipayTradeQueryResponse response = client.Execute(request);
//頁面輸出的response.Body就是orderString 可以直接給用戶端請求,無需再做處理。
System.Diagnostics.Debug.WriteLine(response.Body);
MessageBox.Show(response.Body);
}
private IAopClient GetAPOClient()
{
return new DefaultAopClient(aliOpenAPI, appid, appPrivateKey, "json", "1.0", "RSA2", aliPublicKey, "utf-8", false);
}
Step 3. 測試
AliPay元件測試需要在Smobiler 雲平台上添加AliPay插件并打包用戶端。登陸雲平台,選擇應用(或者建立應用)-應用打包,