首先做为支付宝SDK它提供了多种平台,网页版,wap版,IOS版,android版等等,今天主要说一下在xamarin里使用android平台的sdk的方法,在网上介绍这块的文章不多,大叔本着贡献的精神继续撰写程序人生!希望各位继续支持大叔!
一 首先下面支付宝android的sdk,也就是手机端的sdk,一般也叫快捷支付
https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1
里面有各种平台的SDK和Demo
二 当用户手机或者设置上没有安装支付宝时,我们应该让它跳到支付宝的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"目录下,看一下截图
三 下面的android Sdk事实上我们需要的是jar文件,我们新建一个“android绑定库项目“,然后把jar文件放到jars文件夹里,把它的生成方式改成“EmbeddedJar”,然后在目标的android应用程序里引用它即可
四 在我们在主程序里,添加android alipay sdk的demo代码,当然我们也可以把它封装成类库,以后重用更方便
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版的支付。
本文转自博客园张占岭(仓储大叔)的博客,原文链接:大叔也说Xamarin~Android篇~支付宝SDK的集成,如需转载请自行联系原博主。