大叔也說Xamarin~Android篇(pian)~支付寶SDK的集成(cheng)
首先做為支(zhi)付寶(bao)SDK它提供了多(duo)種平臺,網頁版,wap版,IOS版,android版等等,今(jin)天(tian)主(zhu)要說一下在xamarin里(li)使用android平臺的sdk的方法,在網上介紹這塊的文章不(bu)多(duo),大叔本著貢獻的精神(shen)繼續撰寫程序人生!希望(wang)各位繼續支(zhi)持大叔!
一 首(shou)先下(xia)面支(zhi)(zhi)付(fu)寶android的(de)sdk,也(ye)就是手機端的(de)sdk,一般也(ye)叫快捷支(zhi)(zhi)付(fu)
里(li)面有各種平臺(tai)的SDK和Demo
二(er) 當用戶(hu)手機或者設置(zhi)上沒有安(an)裝支(zhi)付寶(bao)時,我(wo)(wo)們應(ying)該讓它跳到支(zhi)付寶(bao)的(de)H5頁面進行支(zhi)付,這個配置(zhi)我(wo)(wo)們可以在AndroidManifest.xml里進行設置(zhi),將下面代碼(ma)添加到application節(jie)點下
<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>
注意,在(zai)vs里,這個文件在(zai)“項目”的“Properties"目錄下,看(kan)一(yi)下截圖
三 下(xia)面的android Sdk事實上我(wo)們需要的是jar文件(jian),我(wo)們新(xin)建一個(ge)“android綁(bang)定庫項目(mu)“,然后把jar文件(jian)放到jars文件(jian)夾里,把它(ta)的生成(cheng)方式改成(cheng)“EmbeddedJar”,然后在目(mu)標的android應(ying)用(yong)程序(xu)里引用(yong)它(ta)即可
四 在我(wo)們(men)在主程序里,添加android alipay sdk的demo代碼,當然我(wo)們(men)也可以把它封裝成類庫,以后重用更方便(bian)
public class RechargeActivity : Activity { public static string PARTNER = "合作商(shang)戶ID"; public static string SELLER = "商(shang)戶收款(kuan)的支付寶賬號"; string RSA_PRIVATE = "商(shang)戶(hu)私密"; 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("支付寶(bao)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 + "\""; // 簽(qian)約賣(mai)家(jia)支付寶賬號 orderInfo += "&seller_id=" + "\"" + SELLER + "\""; // 商(shang)戶網(wang)站唯一訂單(dan)號 orderInfo += "&out_trade_no=" + "\"DJ" + DateTime.Now.ToString("yyyyMMddhhmmss") + "\""; // 商(shang)品名稱 orderInfo += "&subject=" + "\"" + subject + "\""; // 商品詳情 orderInfo += "&body=" + "\"" + body + "\""; // 商品金額 orderInfo += "&total_fee=" + "\"" + 1 + "\""; // 服務器異步(bu)通知頁面(mian)路徑 orderInfo += "¬ify_url=" + "\"" + "//111.203.248.34:89/Order/AlipayNotify" + "\""; // 服務(wu)接口(kou)名稱, 固(gu)定(ding)值 orderInfo += "&payment_type=\"1\""; // 參數編(bian)碼(ma), 固(gu)定值 orderInfo += "&_input_charset=\"utf-8\""; // 設置未付款交易的超時時間 // 默認30分鐘,一旦超時,該筆交易就(jiu)會(hui)自動被關(guan)閉(bi)。 // 取值范圍(wei):1m~15d。 // m-分(fen)鐘(zhong),h-小時,d-天,1c-當天(無(wu)論交易何時創(chuang)建,都在0點關閉)。 // 該(gai)參數數值不接受小(xiao)數點,如1.5h,可轉換為(wei)90m。 orderInfo += "&it_b_pay=\"30m\""; // extern_token為經過(guo)快登(deng)授權獲取到的alipay_open_id,帶(dai)上(shang)此參數用戶將使用授權的賬戶進行支付 // orderInfo += "&extern_token=" + "\"" + extern_token + "\""; // 支付寶(bao)處(chu)理完請求后,當前頁面(mian)跳轉(zhuan)到商戶指定(ding)頁面(mian)的路徑,可空 orderInfo += "&return_url=\"//111.203.248.34:89/Order/AlipayNotify\""; // 調用銀行卡(ka)支付,需配置此參(can)(can)數,參(can)(can)與簽名, 固定值 (需要簽約《無線銀行卡(ka)快捷支付》才能(neng)使用) // orderInfo += "&paymethod=\"expressGateway\""; return orderInfo; } public String MySignType { get { return "sign_type=\"RSA\""; } } #endregion }
最后運行程序,在支(zhi)付時,你的支(zhi)付寶APP就被調用(yong)出來了,如(ru)圖
當你的設(she)置上(shang)沒(mei)有支(zhi)付(fu)寶時,會自(zi)動跳(tiao)到支(zhi)付(fu)寶的H5頁面(mian),讓你進行wap版(ban)的支(zhi)付(fu)。