Ejemplo n.º 1
0
 /// <summary>
 /// 获取订单字符串后发送支付请求
 /// </summary>
 /// <param name="order"></param>
 public void Send(fastCSharp.net.returnValue<string> order)
 {
     bool isCheck = false;
     if (order.IsReturn && order.Value != null)
     {
         try
         {
             using (PayTask alipay = new PayTask(activity))
             {
                 IDictionary<string, string> payResult = alipay.PayV2(order.Value, isShowPayLoading);
                 if (payResult["resultStatus"] == "9000")
                 {
                     string result = payResult["result"];
                     if (checkOrderResult(result))
                     {
                         isCheck = true;
                         if (callback != null) callback(result);
                         return;
                     }
                 }
             }
         }
         catch (System.Exception error)
         {
             fastCSharp.log.Default.Add(error, null, false);
         }
     }
     if (!isCheck && callback != null) callback(null);
 }
Ejemplo n.º 2
0
        public void ShowActionSheet()
        {
            #region ActinSheet Items
            List<ActionSheetArgs> items = new List<ActionSheetArgs>();

            var alipayItem = new ActionSheetArgs("支付宝");
            alipayItem.OnClick += () =>
            {
                if (!AlipayHelper.CheckConfig())
                {
                    Toast.MakeText(ApplicationContext,
                        "系统异常.",
                        ToastLength.Long);
                    Log.Error(Tag, "Aplipay Config Exception ");
                    return;
                }
                string payInfo = AlipayHelper.GetPayInfo();
                // 完整的符合支付宝参数规范的订单信息
                Runnable payRunnable = new Runnable(() =>
                {
                    PayTask alipay = new PayTask(this);
                    // 调用支付接口,获取支付结果
                    string result = alipay.Pay(payInfo);

                    Message msg = new Message
                    {
                        What = (int)MsgWhat.AlipayPayFlag,
                        Obj = result
                    };
                    _handler.SendMessage(msg);
                });

                // 必须异步调用
                Thread payThread = new Thread(payRunnable);
                payThread.Start();
            };
            items.Add(alipayItem);
            var weixinItem = new ActionSheetArgs("微信");
            weixinItem.OnClick += () =>
            {
                Runnable wxpayRunnable = new Runnable(() =>
                {
                    _weixinpayHelper = new WeixinpayHelper(this);
                    _weixinpayHelper.Execute();
                });

                // 必须异步调用
                Thread payThread = new Thread(wxpayRunnable);
                payThread.Start();

            };
            items.Add(weixinItem);

            #endregion
            var menuView = new ActionSheet(this);
            menuView.SetCancelButtonTitle("取消");// before add items
            menuView.Items = items;
            menuView.CancelableOnTouchOutside = true;
            menuView.ShowMenu();
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 同步调用支付
 /// </summary>
 /// <param name="activity">UI 上下文</param>
 /// <param name="getOrderString">获取订单字符串</param>
 /// <param name="checkOrderResult">验证订单结果</param>
 /// <param name="isShowPayLoading">用户在商户app内部点击付款,是否需要一个loading做为在钱包唤起之前的过渡,这个值设置为true,将会在调用pay接口的时候直接唤起一个loading,直到唤起H5支付页面或者唤起外部的钱包付款页面loading才消失。(建议将该值设置为true,优化点击付款到支付唤起支付页面的过渡过程。)</param>
 /// <returns>订单结果,null 表示失败</returns>
 public static string Pay(Activity activity, Func<fastCSharp.net.returnValue<string>> getOrderString, Func<string, fastCSharp.net.returnValue<bool>> checkOrderResult, bool isShowPayLoading = true)
 {
     if (activity != null && getOrderString != null && checkOrderResult != null)
     {
         try
         {
             string orderInfo = getOrderString();
             if (orderInfo != null)
             {
                 using (PayTask alipay = new PayTask(activity))
                 {
                     IDictionary<string, string> payResult = alipay.PayV2(orderInfo, isShowPayLoading);
                     if (payResult["resultStatus"] == "9000")
                     {
                         string result = payResult["result"];
                         if (checkOrderResult(result)) return result;
                     }
                 }
             }
         }
         catch (Exception error)
         {
             fastCSharp.log.Default.Add(error, null, false);
         }
     }
     return null;
 }
Ejemplo n.º 4
0
        public ChinaRailwayApp(ulong id, string key, string gateway_url)
        {
            this.app_id = id;

            {
                var data_serializer = new DataSerializer(new JsonSerializerSettings()
                {
                    DateFormatString  = "yyyy-MM-dd HH:mm:ss.fff",
                    NullValueHandling = NullValueHandling.Ignore,
                    ContractResolver  = new Smartunicom.Runtime.Serialization.ContractResolver.JsonSnakeCasePropertyNamesContractResolver()
                });

                var data_signer = new RS256();
                data_signer.SetPrivateKey(key);

                var data_signer_all = new DataSignature(data_signer, data_verifier, data_hs256);

                {
                    this.order_task    = new ChargeTask(this.app_id, data_serializer, data_signer_all, gateway_url);
                    this.payment_task  = new PayTask(this.app_id, data_serializer, data_signer_all, gateway_url);
                    this.transfer_task = new TransferTask(this.app_id, data_serializer, data_signer_all, gateway_url);
                    this.webhook_task  = new WebHookTask(this.app_id, data_serializer, data_signer_all, gateway_url);
                    this.serializer    = new Serializer(data_serializer);
                }
            }
        }
Ejemplo n.º 5
0
        string RSA_PRIVATE           = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCcoUuOkRqYpyWbq/E8I4TLjAcabujagLT46YBFwtMhJm6/93hvk/BZwq/w2vu4UbPqFHaYmw58F89Hzm4yXmj8oogQJhyLOauZbVkK9+UlUAq13xDLExd9BCxGD0d6mBk/XulF+NPQqhgbkbg2c9s8F2fO/wDLbhdJCUEBmJwCM7MVvLnJlRTe17CwxWYjOJaaNN8YLSi/MFzDIF8NBZqFdF9QkW490seO7po7EBSg8GgglxL1Hds+/FDc7M+JcG4f3xEIh26OhxPZcJH7xnzxFWl/Yjs4Q4jRtS4AjD9aEruPJ8krFynzxJo/9JPBqP7DJ9mBV6ulEH/uYjhsoFXfAgMBAAECgf8GHkbVStW/IMhXTGAf+UM2sEGWxr5RyrVHA9f+4Z1driKlXQVXVnANEY3N2r/6czaT7jizvVrTfhqas3WaghWXyMGH3/U9ewM4+wx/YS+SRY4ljJEbXaONPpx8IByqrUZPM2XpVc7wV7SZXxfTCLOHpWJos41UZPiD4dioN03gyBSR50JbG8AKqcFJ4MyAi9R21BuKpsMo4xtCiApOylwR89ZJMuujcsHx3euBCdHezm577144P6pEfZgTQ/GOmw2W1zkveigy6ca+EskuNzmczZ6lRgxY2/avgPCX/6vDD/pWacSqX4VE/oBZaCQ5msfs+TfNlwjnfAXYEsiaEDECgYEAyIMB4FYcDxXMfozHlyiLdmvul4mNiCbxhXPjZDvGZgOCd4mm/8bNv9KJ/RYI+2UOnPzo5PxDcRizAn4h5gDD4LArZWj9yyniQ2evaHyu3FtSDKl0tlDO4J4Zu20ayZAMmVHjoxA+pGxQsuRBLrm9odL/EVf0uCTRya3t58JuYg0CgYEAx/mMBgOpgfGqAC1h+HHX0x1q165kpW4E04u1S7v660bBFN+YWQcuF0YBrT+yAfim3U1+w5xDw1WADK8w1Hqc7tjSEVpnRUk/DHWaCWVzpPtwniV1W2nTGkE+o0g3e+pzMZmn10ptW3pGkcRzoagEz1zYTeGAs6Ym+qRkP2FQ2JsCgYEAt3Icall9zFNeRz2XcXUXux1eKWggg7tVZoozNUX26ug1GhZnIkWJggEmW9UoHJBFgV1l2fHt5e/5/sLVUq/KhavH2DzpTVGhf5fCBG9mL5ahB5KVhCOEUj5zPmXAhz5yOGeSQ2KeXSH35uMru4sVspLu57g33a1Z/hFRwqLBCJUCgYAWTJF8qjPgtZ4LXwQpvCgg9orPejbm65nGLTIOO+wDCGTHexd19gMBvWC6fPvQlHWm/9k+3tH/mi0pPO/pAbM2Px9NqBMT+tL5BLQkkBeRMiigufSYOPi9WMEvXAIz4zTtNwEsVLRVGxF7d7idMis3JFdKd/buEX0PPf2fw65MOQKBgQC/QPKmyhJlWj7ryk9o8+7FCYpccRZttmN4srL0DaGX/U4AniLFy3Uh16v2xgJAZmWtZyvfgqha1SXYeRs8BRDrBa26qvQKnIE0d4aE6pMTFOCarSMBCJReKSMy4j1/UN12GPg8jXZ8yKyrPX88EnKLSWfc5LBE5GBcEEhLMDZRtg=="; //商户密钥


        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            SetContentView(Resource.Layout.Pay);

            PayTask payTask = new PayTask(this);

            Toast.MakeText(this, payTask.Version, ToastLength.Long).Show();

            var btn = FindViewById <Button>(Resource.Id.btnPay);

            btn.Click += btn_Click;
        }
Ejemplo n.º 6
0
        private void Pay(object sign)
        {
            try
            {
                PayTask payTask = new PayTask(this);
                var     result  = payTask.PayV2(sign.ToString(), true);
                string  Status  = result["resultStatus"];

                RunOnUiThread(() => { MessagingCenter.Send(new object(), "PaySuccess", Status); });
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Ejemplo n.º 7
0
 private void Pay()
 {
     try
     {
         var con  = getOrderInfo("test", "testbody");
         var sign = SignatureUtils.Sign(con, RSA_PRIVATE);
         sign = Java.Net.URLEncoder.Encode(sign, "utf-8");
         con += "&sign=\"" + sign + "\"&" + MySignType;
         PayTask pa     = new PayTask(this);
         var     result = pa.Pay(con, false);
         Logger_Info("支付宝result:" + result);
     }
     catch (Exception ex)
     {
         Logger_Info("2" + ex.Message + ex.StackTrace);
     }
 }
Ejemplo n.º 8
0
        private string Pay(object sign)
        {
            try
            {
                PayTask payTask = new PayTask(this);
                var     result  = payTask.Pay(sign.ToString(), false);
                string  status  = GetPayResultStatus(result);

                //MessagingCenter.Send(new object(), "PaySuccess", status);

                return(status);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Ejemplo n.º 9
0
        /*
         * public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
         * {
         *  Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
         *
         *  base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
         * }*/

        #region 支付宝
        private void Pay(object sign)
        {
            try
            {
                PayTask payTask = new PayTask(this);
                var     result  = payTask.PayV2(sign.ToString(), true);
                //Status = result["resultStatus"];


                Looper.Prepare();
                //switch (status)
                //{
                //    case "9000": Android.Widget.Toast.MakeText(this, "订单支付成功!", Android.Widget.ToastLength.Long).Show(); break;
                //    case "8000": Android.Widget.Toast.MakeText(this, "正在处理中!", Android.Widget.ToastLength.Long).Show(); break;
                //    case "4000": Android.Widget.Toast.MakeText(this, "订单支付失败!", Android.Widget.ToastLength.Long).Show(); break;
                //    case "6001": Android.Widget.Toast.MakeText(this, "用户中途取消!", Android.Widget.ToastLength.Long).Show(); break;
                //    case "6002": Android.Widget.Toast.MakeText(this, "网络连接出错!", Android.Widget.ToastLength.Long).Show(); break;
                //    default: break;
                //}
                switch (result["resultStatus"])
                {
                case "9000": CrossToastPopUp.Current.ShowToastSuccess("订单支付成功!", ToastLength.Long); break;

                case "8000": CrossToastPopUp.Current.ShowToastWarning("正在处理中!", ToastLength.Long); break;

                case "4000": CrossToastPopUp.Current.ShowToastError("订单支付失败!", ToastLength.Long); break;

                case "6001": CrossToastPopUp.Current.ShowToastWarning("用户中途取消!", ToastLength.Long); break;

                case "6002": CrossToastPopUp.Current.ShowToastError("网络连接出错!", ToastLength.Long); break;

                default: break;
                }
                Looper.Loop();

                //return result["resultStatus"];
                //Thread.CurrentThread.Abort();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Ejemplo n.º 10
0
 protected override void OnCreate(Bundle bundle)
 {
     base.OnCreate(bundle);
     SetContentView(Resource.Layout.Main);
     var button = FindViewById<Button>(Resource.Id.MyButton);
     var alipayHandler=new AlipayHandler();
     button.Click += delegate
     {
         var payTask = new PayTask(this);
         var order =
             "partner=\"2088001152192050\"&seller_id=\"[email protected]\"&out_trade_no=\"w2413209423\"&subject=\"payw2413209423\"&body=\"payw2413209423\"&total_fee=\"0.01\"&notify_url=\"http://221.122.53.190:6804/NewWebPay/FromPhoneAlipay.aspx\"&service=\"mobile.securitypay.pay\"&payment_type=\"1\"&_input_charset=\"utf-8\"&sign=\"E0tHnnq40wfnMn6G6T54%2fBmshvUlSUYAcWhgZjoxQu02W8gspQFHogCDDAmnfo9WFUG%2b%2f32x8IIl1hUkaK9sqP64Fvk6PnIyMgoms8en1PpIL0Z4VUSsqjtGrOVrhwfOnb5sWlPATEu7MuXWnoH1yp%2fWJdyPdHmzljEF%2fFINyZE%3d\"&sign_type=\"RSA\"";
         var result = payTask.Pay(order);
         var msg = new Message
         {
             Obj = result
         };
         alipayHandler.SendMessage(msg);
     };
 }
Ejemplo n.º 11
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource   = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);

            Xamarin.Forms.MessagingCenter.Subscribe <object>(this, MessagingCenterKey.Pay, obj =>
            {
                /*
                 * 这里只是为了方便直接向商户展示支付宝的整个支付流程;所以Demo中加签过程直接放在客户端完成;
                 * 真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成;
                 * 防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;
                 *
                 * orderInfo 的获取必须来自服务端;
                 */
                var appid      = "";
                var rsa2       = true;
                var para       = OrderInfoUtil2_0.BuildOrderParamMap(appid, rsa2);
                var orderParam = OrderInfoUtil2_0.BuildOrderParam(para);
                var privateKey = "";
                var sign       = OrderInfoUtil2_0.GetSign(para, privateKey, rsa2);
                var orderInfo  = orderParam + "&" + sign;

                // 必须异步调用
                Task.Run(() =>
                {
                    var alipay = new PayTask(this);
                    var result = alipay.PayV2(orderInfo, true);
                    MessagingCenter.Send(new object(), MessagingCenterKey.Payed, result);
                });
            });

            LoadApplication(new App());
        }
Ejemplo n.º 12
0
        private void AlipayPay(object sender, EventArgs args)
        {


            if (!AliPayHelper.CheckConfig())
            {
                Toast.MakeText(ApplicationContext,
                    "系统异常.",
                    ToastLength.Long);
                Log.Error(Tag, "Aplipay Config Exception ");
                return;
            }
            string payInfo = AliPayHelper.GetPayInfo();
            // 完整的符合支付宝参数规范的订单信息
            Runnable payRunnable = new Runnable(() =>
            {
                PayTask alipay = new PayTask(this);
                // 调用支付接口,获取支付结果
                string result = alipay.Pay(payInfo);

                Message msg = new Message
                {
                    What = (int)MsgWhat.AlipayPayFlag,
                    Obj = result
                };
                _handler.SendMessage(msg);
            });

            // 必须异步调用
            Thread payThread = new Thread(payRunnable);
            payThread.Start();
        }
Ejemplo n.º 13
0
        /**
 * get the sdk version. 获取SDK版本号
 * 
 */
        public void getSDKVersion()
        {
            PayTask payTask = new PayTask(this);
            string version = payTask.Version;
            Toast.MakeText(this, version, ToastLength.Short).Show();
        }
Ejemplo n.º 14
0
        /**
	 * check whether the device has authentication alipay account.
	 * 查询终端设备是否存在支付宝认证账户
	 * 
	 */
        public void check(object o, EventArgs e)
        {
            Runnable checkRunnable = new Runnable(()=> {
                PayTask payTask = new PayTask(this);
                // 调用查询接口,获取查询结果
                bool isExist = payTask.CheckAccountIfExist();

                Message msg = new Message();
                msg.What = SDK_CHECK_FLAG;
                msg.Obj = isExist;
                mHandler.SendMessage(msg);
            });

            Thread checkThread = new Thread(checkRunnable);
            checkThread.Start();

        }
Ejemplo n.º 15
0
        public void pay(object o, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(PARTNER) || string.IsNullOrWhiteSpace(RSA_PRIVATE)
                    || string.IsNullOrWhiteSpace(SELLER))
            {
                new AlertDialog.Builder(this)
                        .SetTitle("警告")
                        .SetMessage("需要配置PARTNER | RSA_PRIVATE| SELLER")
                        .SetPositiveButton("确定", (dialoginterface, i) => { Finish(); }

                                ).Show();
                return;
            }
            // 订单
            string orderInfo = GetOrderInfo("测试的商品", "该测试商品的详细描述", "0.01");

            // 对订单做RSA 签名
            string sign = Sign(orderInfo);
            try
            {
                // 仅需对sign 做URL编码
                sign = Java.Net.URLEncoder.Encode(sign, "UTF-8");
            }
            catch (UnsupportedEncodingException ex)
            {
                ex.PrintStackTrace();
            }
            finally
            {
                string payInfo = orderInfo + "&sign=\"" + sign + "\"&"
                                + GetSignType();
                // 完整的符合支付宝参数规范的订单信息
                Runnable payRunnable = new Runnable(()=> {
                    PayTask alipay = new PayTask(this);
                    // 调用支付接口,获取支付结果
                    string result = alipay.Pay(payInfo);

                    Message msg = new Message();
                    msg.What = SDK_PAY_FLAG;
                    msg.Obj = result;
                    mHandler.SendMessage(msg);
                });
                
                // 必须异步调用
                Thread payThread = new Thread(payRunnable);
                payThread.Start();
            }


        }