大叔也说Xamarin~Android篇~支付宝SDK的集成

简介: 原文:大叔也说Xamarin~Android篇~支付宝SDK的集成首先做为支付宝SDK它提供了多种平台,网页版,wap版,IOS版,android版等等,今天主要说一下在xamarin里使用android平台的sdk的方法,在网上介绍这块的文章不多,大叔本着贡献的精神继续撰写程序人生!希望各位继续...
原文: 大叔也说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 += "&notify_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版的支付。

目录
相关文章
|
3月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
537 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
10月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
674 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
447 0
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
267 7
|
Java Linux API
Android SDK
【10月更文挑战第21天】
344 1
|
开发工具 Android开发
Android项目架构设计问题之SDK内部减少每次回调时的冗余判断逻辑如何解决
Android项目架构设计问题之SDK内部减少每次回调时的冗余判断逻辑如何解决
135 0
|
Java API 开发工具
Android项目架构设计问题之为SDK添加新的回调支持如何解决
Android项目架构设计问题之为SDK添加新的回调支持如何解决
142 0
|
开发工具 Android开发 iOS开发
使用xamarin开发Android、iOS报错failed to open directory: 系统找不到指定的文件
使用vs2019学习xamarin时,创建新程序。使用模拟器真机等测试都报错如下图错误: ![请在此添加图片描述](https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/5877188/20231030-de8ce5fd.png?x-cos-security-token=r4KyZDEowPT0kGTL0LqE8EnwfN1Nzexadb05dcffed3939ff8d7591c528c01706nvpGSE93QwHpZM8NwhJNTZctNRQa0l3KDhEnqj8P7d8t
261 0
使用xamarin开发Android、iOS报错failed to open directory: 系统找不到指定的文件
|
Java C# Android开发
.NET(WinCE、WM)开发转Android开发 ——Xamarin和Smobiler对比
WinCE从1995年诞生至今,已有20多年的发展历史,行业成熟方案覆盖范围广,从车载、工控、手持机都有涉及,且方案成熟。 近些年,Android以后来居上的态势,逐渐渗透至各行业领域,硬件手持大厂也把产品线重心向Android手持迁移,基于Android的行业解决方案越来越成熟,WinCE的开发人才流失,在WinCE解决方案上吃老本的企业寻求转型。
|
Web App开发 测试技术 Android开发
xamarin开发android收集的一些工具
原文:xamarin开发android收集的一些工具 xamarin开发android收集的一些工具 工欲善其事,必先利其器,从16年下半年开始做xamarin相关的开发,平时使用的一些工具和google插件给大家分享一下,都有下载地址,持续更新。
1684 0

热门文章

最新文章