回到目錄html
首先作爲支付寶SDK它提供了多種平臺,網頁版,wap版,IOS版,android版等等,今天主要說一下在xamarin裏使用android平臺的sdk的方法,在網上介紹這塊的文章很少,大叔本着貢獻的精神繼續撰寫程序人生!但願各位繼續支持大叔!android
一 首先下面支付寶android的sdk,也就是手機端的sdk,通常也叫快捷支付express
https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1服務器
裏面有各類平臺的SDK和Demoapp
二 當用戶手機或者設置上沒有安裝支付寶時,咱們應該讓它跳到支付寶的H5頁面進行支付,這個配置咱們能夠在AndroidManifest.xml裏進行設置,將下面代碼添加到application節點下異步
<application android:label="Tsingda.DataCenter.AndroidNative" android:icon="@drawable/Icon"> <activity android:name="com.alipay.sdk.app.H5PayActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind"></activity> <activity android:name="com.alipay.sdk.auth.AuthActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind"></activity> </application>
注意,在vs裏,這個文件在「項目」的「Properties"目錄下,看一下截圖ide
三 下面的android Sdk事實上咱們須要的是jar文件,咱們新建一個「android綁定庫項目「,而後把jar文件放到jars文件夾裏,把它的生成方式改爲「EmbeddedJar」,而後在目標的android應用程序裏引用它便可網站
四 在咱們在主程序裏,添加android alipay sdk的demo代碼,固然咱們也能夠把它封裝成類庫,之後重用更方便this
public class RechargeActivity : Activity { public static string PARTNER = "合做商戶ID"; public static string SELLER = "商戶收款的支付寶帳號"; string RSA_PRIVATE = "商戶私密"; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.Recharge); Toast.MakeText(this, Intent.GetStringExtra("TaskID"), ToastLength.Short).Show(); var btn = FindViewById<Button>(Resource.Id.payBtn); btn.Click += btn_Click; } void Logger_Info(string msg) { using (System.IO.StreamWriter srFile = new System.IO.StreamWriter("/sdcard/zzl.txt", true)) { srFile.WriteLine(string.Format("{0}{1}{2}" , DateTime.Now.ToString().PadRight(20) , ("[ThreadID:" + Thread.CurrentThread.ManagedThreadId.ToString() + "]").PadRight(14) , msg)); srFile.Close(); srFile.Dispose(); } } void btn_Click(object sender, EventArgs e) { try { System.Threading.Thread the = new System.Threading.Thread(Pay); the.Start(); } catch (Exception ex) { Logger_Info("1" + ex.Message); } } private void Pay() { try { var con = getOrderInfo("test", "testbody"); var sign = SignatureUtils.Sign(con, RSA_PRIVATE); sign = URLEncoder.Encode(sign, "utf-8"); con += "&sign=\"" + sign + "\"&" + MySignType; Com.Alipay.Sdk.App.PayTask pa = new Com.Alipay.Sdk.App.PayTask(this); var result = pa.Pay(con, false); Logger_Info("支付寶result:" + result); } catch (Exception ex) { Logger_Info("2" + ex.Message + ex.StackTrace); } } #region 組合 public String getOrderInfo(String subject, String body) { // 簽約合做者身份ID String orderInfo = "partner=" + "\"" + PARTNER + "\""; // 簽約賣家支付寶帳號 orderInfo += "&seller_id=" + "\"" + SELLER + "\""; // 商戶網站惟一訂單號 orderInfo += "&out_trade_no=" + "\"DJ" + DateTime.Now.ToString("yyyyMMddhhmmss") + "\""; // 商品名稱 orderInfo += "&subject=" + "\"" + subject + "\""; // 商品詳情 orderInfo += "&body=" + "\"" + body + "\""; // 商品金額 orderInfo += "&total_fee=" + "\"" + 1 + "\""; // 服務器異步通知頁面路徑 orderInfo += "¬ify_url=" + "\"" + "http://111.203.248.34:89/Order/AlipayNotify" + "\""; // 服務接口名稱, 固定值 orderInfo += "&payment_type=\"1\""; // 參數編碼, 固定值 orderInfo += "&_input_charset=\"utf-8\""; // 設置未付款交易的超時時間 // 默認30分鐘,一旦超時,該筆交易就會自動被關閉。 // 取值範圍:1m~15d。 // m-分鐘,h-小時,d-天,1c-當天(不管交易什麼時候建立,都在0點關閉)。 // 該參數數值不接受小數點,如1.5h,可轉換爲90m。 orderInfo += "&it_b_pay=\"30m\""; // extern_token爲通過快登受權獲取到的alipay_open_id,帶上此參數用戶將使用受權的帳戶進行支付 // orderInfo += "&extern_token=" + "\"" + extern_token + "\""; // 支付寶處理完請求後,當前頁面跳轉到商戶指定頁面的路徑,可空 orderInfo += "&return_url=\"http://111.203.248.34:89/Order/AlipayNotify\""; // 調用銀行卡支付,需配置此參數,參與簽名, 固定值 (須要簽約《無線銀行卡快捷支付》才能使用) // orderInfo += "&paymethod=\"expressGateway\""; return orderInfo; } public String MySignType { get { return "sign_type=\"RSA\""; } } #endregion }
最後運行程序,在支付時,你的支付寶APP就被調用出來了,如圖編碼
當你的設置上沒有支付寶時,會自動跳到支付寶的H5頁面,讓你進行wap版的支付。