大叔也说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版的支付。

时间: 2024-08-03 19:44:05

大叔也说Xamarin~Android篇~支付宝SDK的集成的相关文章

大叔也说Xamarin~Android篇~环境部署与破解

原文:大叔也说Xamarin~Android篇~环境部署与破解 现在移动开发很HOT,以至于很多人都转向了它,大叔也不例外,这次有机制接触一下xamarin这个东西,其实之前也用于xamarin,只是用来写网页程序,没有接触到移动开发,对于xamarin的移动开发分为三个分支,android,ios和winform,以后可能还会支持其它的开发,xamarin这个东西是跨平台的,本身也有mac,window版本,根据你的需要和习惯而定. Android需要涉及的几个东西 java jdk:(Jav

大叔也说Xamarin~Android篇~ListView里的Click事件并获取本行的其它元素

原文:大叔也说Xamarin~Android篇~ListView里的Click事件并获取本行的其它元素 我原创,我贡献,我是仓储大叔 本篇大叔原创,本着对技术的热爱去研究它,把成果分享给国人!大叔始终相信一句话:你只有选择一个感兴趣的工作,你才能更好的发挥你的潜力,而这一切都建立在你不断研究,不断钻研的前提下. Xamarin文章在网上比较少,而ListView相关的信息更好,有限的那么几个还都说的不清楚,只是告诉大家如何去完成按钮的事件,而在事件里,如何获取当前行的其它元素信息则没有说明,在网

大叔也说Xamarin~Android篇~Activity之间传递数组

原文:大叔也说Xamarin~Android篇~Activity之间传递数组 我们在开发应用程序时,不可能只使用一个Layout或者一个Activity,比如你个管理系统,要求用户先登陆然后再使用,这时你至少要有两个activity吧,先登陆一个,然后成功后需要跳到别一个Activity,这就遇到了多个Activity之间传递数据的问题,这也是今天我们要说的! 先聊聊Activity 首先一个Activity都会去继承Activity类,这个类里有方法已经替我们实现,我们可以把activity看

大叔也说Xamarin~Android篇~日志的记录

原文:大叔也说Xamarin~Android篇~日志的记录 无论哪个平台,开始哪种应用程序,日志总是少不了的,大家在Lind.DDD里也可以看到大叔的日志组件,而在xamarin进行移动开发时,为了更好的调试,记录运行的情况,日志也是必须的,这讲主要说一下在xamarin for android开发时,日志组件的实现. 对于android平台有自己的日志组件,它主要在输出窗口进行输出,而我们有时需要它将日志写入到磁盘,对于手机可以是sdCard等,这时就需要我们自己封装一个日志组件了. 依旧面向

大叔也说Xamarin~Android篇~调用远程API接口,发POST请求

原文:大叔也说Xamarin~Android篇~调用远程API接口,发POST请求 Xamarin我们在上节已经教大家如何去部署它的环境了,今天来说一个实际的例子,使用android客户调用.net web api的一个接口,并发送POST请求,当服务端回到请求后做出响应,客户端android将响应的内容输出,并跳换到别一个Activity页面,在新视图上加载网页内容到webView控件上,整个流程结束! 一 在主页面上添加几个表单元素,账号,密码,登陆按钮,并在Activity类的OnCrea

大叔也说Xamarin~Android篇~原生登陆与WebView的网站如何共享Session

原文:大叔也说Xamarin~Android篇~原生登陆与WebView的网站如何共享Session 事情是这样的,我们最近开了一个APP,主要使用xamarin做了一个登陆,它与服务器API进行数据通讯,当用户名密码正确去,跳转到新的activity,并在webview控件中打开服务端的Html5页面,而h5页面有些需要进行授权才能访问,如用户中心,我的订单,我的商品等等,而我们的登陆是在原生的activity里实现的,在登陆成功后服务端会向它分配一个SessionID,并存储在客户端,以做为

大叔也说Xamarin~Android篇~为HttpClient共享Session,android与api的session共享机制

杂谈 在进行android进行开发时,我们的数据一般通过接口来获收,这里指的接口泛指web api,webservice,wcf,web应用程序等:它们做为服务端与数据库进行直接通讯,而APP这块通过向这些接口发Http请求来获得数据,这样的好处大叔认为,可以有效的降低软件的开发难度,所以数据交互都被分离到了服务层而,而与客户交互的功能完全都在APP端,这类似于目前比较流行的SOA架构,即一个服务为多种终端服务:无论是你WEB网站,手机IOS,手机Android,平板还是其它TV之类的,都统一调

利用android客户端支付宝sdk的jar包和demo的几个处理支付的类再做一个jar包

问题描述 利用android客户端支付宝sdk的jar包和demo的几个处理支付的类再做一个jar包 利用android客户端支付宝sdk的jar包和demo的几个处理支付的类(不包含activity)再做一个jar包,其它项目中只要导入该包和传入几个参数就可以使用支付宝支付功能 解决方案 将项目导出作为一个jar供他人引用不就好了,或者使用webservice

大叔也学Xamarin系列

原文:大叔也学Xamarin系列 回到占占推荐博客索引 我就是我,请叫我仓储大叔 大叔听很多客户说,xamarin的资料网上太少了,是的,大叔也相信,因为大叔在学xamarin里确实很费劲,只能看看androd for java了,呵呵,因为xamarin自己的API资料都非常的少,哈哈,现在把xamarin大叔的文章整理了一下,贡献给大家,希望可以对大家有所帮助!也希望大家继续支持仓储大叔! 无所不能的大叔之Xamarin~Android开发系列 大叔也说Xamarin~Android篇~环境