大叔也说Xamarin~Android篇~支付宝SDK的集成
首先做为支付宝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版的支付。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2015-01-19 知方可补不足~用SqlProfiler来监视数据库死锁
2013-01-19 开发人员应该对IIS理论层的知识了解的多一些~第一讲 什么是Http?
2013-01-19 开发人员应该对IIS理论层的知识了解的多一些~目录