Ejemplo n.º 1
0
 public override void SendRequest()
 {
     Configuration.GatewayProvider provider = Configuration.PayConfiguration.GetConfig().Providers["bank"] as Configuration.GatewayProvider;
     if (provider != null)
     {
         this.RedirectToGateway(string.Format(CultureInfo.InvariantCulture, provider.Attributes["urlFormat"], new object[] { this.orderId, this.getGateway.Data }));
     }
 }
Ejemplo n.º 2
0
        public override void SendRequest()
        {
            string action = HttpContext.Current.Request.QueryString["action"];

            if (string.IsNullOrWhiteSpace(action))
            {
                action = "show";
                //HttpContext.Current.Response.Write("NO ACTION");
                //HttpContext.Current.Response.End();
                //return;
            }
            action = action.ToLower();

            Utils.WxPayHelper wxPayHelper = new Utils.WxPayHelper();
            //先设置基本信息
            wxPayHelper.SetAppId(this.appid);
            wxPayHelper.SetAppKey(this.key2);
            wxPayHelper.SetPartnerKey(this.key);
            wxPayHelper.SetSignType("SHA1");
            //设置请求package信息
            wxPayHelper.SetParameter("bank_type", bank_type);
            wxPayHelper.SetParameter("body", body);                         //商品描述
            wxPayHelper.SetParameter("partner", partner);                   //partner 商户号
            wxPayHelper.SetParameter("out_trade_no", out_trade_no);         //商家订单号
            wxPayHelper.SetParameter("total_fee", total_fee);               //商品金额,以分为单位
            wxPayHelper.SetParameter("fee_type", fee_type);                 //币种,1人民币
            wxPayHelper.SetParameter("notify_url", notify_url);
            wxPayHelper.SetParameter("spbill_create_ip", spbill_create_ip); //用户的公网ip,不是商户服务器IP
            wxPayHelper.SetParameter("input_charset", input_charset);

            //System.Console.Out.WriteLine("生成app支付package:");
            //System.Console.Out.WriteLine(wxPayHelper.CreateAppPackage("test"));
            //System.Console.Out.WriteLine("生成jsapi支付package:");
            //string jsApiPackage = wxPayHelper.CreateBizPackage();
            //System.Console.Out.WriteLine(jsApiPackage);
            //System.Console.Out.WriteLine("生成原生支付url:");
            //System.Console.Out.WriteLine(wxPayHelper.CreateNativeUrl("abc"));
            //System.Console.Out.WriteLine("生成原生支付package:");
            //System.Console.Out.WriteLine(wxPayHelper.CreateNativePackage("0", "ok"));

            //DONE: 输出JS进行网关交互
            string result;

            switch (action)
            {
            case "show":
                Configuration.GatewayProvider provider = Configuration.PayConfiguration.GetConfig().Providers["wechat"] as Configuration.GatewayProvider;
                if (provider != null)
                {
                    this.RedirectToGateway(string.Format(CultureInfo.InvariantCulture,
                                                         HttpContext.Current.Server.HtmlDecode(provider.Attributes["urlFormat"]),
                                                         this.out_trade_no, this.getGateway.Data));
                    return;
                }
                result = "{\"STATUS\":\"ERROR\",\"DATA\":\"GATEWAY PROVIDER NOT FOND\"}";
                break;

            case "bizpackage":
                result = "{\"STATUS\":\"SUCCESS\",\"DATA\":" + wxPayHelper.CreateBizPackage() + "}";
                break;

            default:
                result = "{\"STATUS\":\"ERROR\",\"DATA\":\"NotImplemented\"}";
                break;
            }

            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.Write(result);
        }
Ejemplo n.º 3
0
        public override void SendRequest()
        {
            string action = HttpContext.Current.Request.QueryString["action"];

            if (string.IsNullOrWhiteSpace(action))
            {
                action = "show";
                //HttpContext.Current.Response.Write("NO ACTION");
                //HttpContext.Current.Response.End();
                //return;
            }
            action = action.ToLower();

            //Utils.WxPayHelper wxPayHelper = new Utils.WxPayHelper();
            ////先设置基本信息
            //wxPayHelper.SetAppId(this.appid);
            //wxPayHelper.SetAppKey(this.key2);
            //wxPayHelper.SetPartnerKey(this.key);
            //wxPayHelper.SetSignType("SHA1");
            ////设置请求package信息
            //wxPayHelper.SetParameter("bank_type", bank_type);
            //wxPayHelper.SetParameter("body", body); //商品描述
            //wxPayHelper.SetParameter("partner", partner); //partner 商户号
            //wxPayHelper.SetParameter("out_trade_no", out_trade_no); //商家订单号
            //wxPayHelper.SetParameter("total_fee", total_fee); //商品金额,以分为单位
            //wxPayHelper.SetParameter("fee_type", fee_type); //币种,1人民币
            //wxPayHelper.SetParameter("notify_url", notify_url);
            //wxPayHelper.SetParameter("spbill_create_ip", spbill_create_ip);//用户的公网ip,不是商户服务器IP
            //wxPayHelper.SetParameter("input_charset", input_charset);

            //System.Console.Out.WriteLine("生成app支付package:");
            //System.Console.Out.WriteLine(wxPayHelper.CreateAppPackage("test"));
            //System.Console.Out.WriteLine("生成jsapi支付package:");
            //string jsApiPackage = wxPayHelper.CreateBizPackage();
            //System.Console.Out.WriteLine(jsApiPackage);
            //System.Console.Out.WriteLine("生成原生支付url:");
            //System.Console.Out.WriteLine(wxPayHelper.CreateNativeUrl("abc"));
            //System.Console.Out.WriteLine("生成原生支付package:");
            //System.Console.Out.WriteLine(wxPayHelper.CreateNativePackage("0", "ok"));

            //DONE: 输出JS进行网关交互
            string resultJson;

            switch (action)
            {
            case "show":
                Configuration.GatewayProvider provider =
                    Configuration.PayConfiguration.GetConfig().Providers["wechat_v3"] as
                    Configuration.GatewayProvider;
                if (provider == null)
                {
                    resultJson = "{\"STATUS\":\"ERROR\",\"DATA\":\"GATEWAY PROVIDER NOT FOND\"}";
                    break;
                }

                //prepayid 只有第一次支付时生成,如果需要再次支付,必须拿之前生成的prepayid。
                //也就是说一个orderNo 只能对应一个prepayid
                string prepayid = string.Empty;

                #region 之前生成过 prepayid,此处可略过

                //创建Model
                UnifiedWxPayModel    model  = UnifiedWxPayModel.CreateUnifiedModel(this.appid, this.partner, this.key);
                UnifiedPrePayMessage result = UnifiedPrePay(model, TradeType.JSAPI);

                //预支付订单
                prepayid = result.Prepay_Id;

                #endregion

                //JSAPI 支付参数的Model
                PayModel payModel = new PayModel()
                {
                    AppId     = model.AppId,
                    Package   = string.Format("prepay_id={0}", prepayid),
                    Timestamp = ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString(),
                    Noncestr  = CommonUtil.CreateNoncestr()
                };

                Dictionary <string, string> nativeObj = new Dictionary <string, string>();
                nativeObj.Add("appId", payModel.AppId);
                nativeObj.Add("package", payModel.Package);
                nativeObj.Add("timeStamp", payModel.Timestamp);
                nativeObj.Add("nonceStr", payModel.Noncestr);
                nativeObj.Add("signType", payModel.SignType);
                payModel.PaySign = model.GetCftPackage(nativeObj);     //生成JSAPI 支付签名
                nativeObj.Add("paySign", payModel.PaySign);

                var    entries = nativeObj.Select(d => string.Format("\"{0}\":\"{1}\"", d.Key, d.Value));
                string data    = "{" + string.Join(",", entries.ToArray()) + "}";

                resultJson = "{\"STATUS\":\"SUCCESS\",\"DATA\":" + data + "}";

                this.RedirectToGateway(string.Format(CultureInfo.InvariantCulture,
                                                     HttpContext.Current.Server.HtmlDecode(provider.Attributes["urlFormat"]),
                                                     this.out_trade_no, this.gatewayInfo.Data, resultJson));
                return;

            case "app":
                Configuration.GatewayProvider providerApp =
                    Configuration.PayConfiguration.GetConfig().Providers["wechat_v3"] as
                    Configuration.GatewayProvider;
                if (providerApp == null)
                {
                    resultJson = "{\"STATUS\":\"ERROR\",\"DATA\":\"GATEWAY PROVIDER NOT FOND\"}";
                    break;
                }

                //prepayid 只有第一次支付时生成,如果需要再次支付,必须拿之前生成的prepayid。
                //也就是说一个orderNo 只能对应一个prepayid
                string prepayidApp = string.Empty;

                #region 之前生成过 prepayid,此处可略过

                //创建Model
                UnifiedWxPayModel    modelApp  = UnifiedWxPayModel.CreateUnifiedModel(this.appid, this.partner, this.key);
                UnifiedPrePayMessage resultApp = UnifiedPrePay(modelApp, TradeType.APP);

                //预支付订单
                prepayidApp = resultApp.Prepay_Id;

                #endregion

                //APP 支付参数的Model
                PayModel payModelApp = new PayModel()
                {
                    AppId = modelApp.AppId
                };
                Dictionary <string, string> nativeObjApp = new Dictionary <string, string>();
                nativeObjApp.Add("appid", modelApp.AppId);
                nativeObjApp.Add("partnerid", this.partner);
                nativeObjApp.Add("prepayid", prepayidApp);
                nativeObjApp.Add("package", "Sign=WXPay");
                nativeObjApp.Add("noncestr", CommonUtil.CreateNoncestr());
                nativeObjApp.Add("timestamp", ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString());
                payModelApp.PaySign = modelApp.GetCftPackage(nativeObjApp);     //生成APP 支付签名
                nativeObjApp.Add("sign", payModelApp.PaySign);

                var    entriesApp = nativeObjApp.Select(d => string.Format("\"{0}\":\"{1}\"", d.Key, d.Value));
                string dataApp    = "{" + string.Join(",", entriesApp.ToArray()) + "}";

                resultJson = "{\"STATUS\":\"SUCCESS\",\"DATA\":" + dataApp + "}";

                this.RedirectToGateway(string.Format(CultureInfo.InvariantCulture,
                                                     HttpContext.Current.Server.HtmlDecode(providerApp.Attributes["urlFormat"]),
                                                     this.out_trade_no, this.gatewayInfo.Data, resultJson));
                return;

            case "bizpackage":
                resultJson = "{\"STATUS\":\"ERROR\",\"DATA\":\"NotImplemented\"}";
                break;

            case "qr":
                Configuration.GatewayProvider providerQR =
                    Configuration.PayConfiguration.GetConfig().Providers["wechat_v3"] as
                    Configuration.GatewayProvider;
                if (providerQR == null)
                {
                    resultJson = "{\"STATUS\":\"ERROR\",\"DATA\":\"GATEWAY PROVIDER NOT FOND\"}";
                    break;
                }

                #region 生成统一支付

                //创建Model
                UnifiedWxPayModel    modelQR  = UnifiedWxPayModel.CreateUnifiedModel(this.appid, this.partner, this.key);
                UnifiedPrePayMessage resultQR = UnifiedPrePay(modelQR, TradeType.NATIVE);

                //返回二维码支付URL
                resultJson = "{\"STATUS\":\"SUCCESS\",\"DATA\":\"" + resultQR.Code_Url + "\",\"Result_Code\":\"" + resultQR.Result_Code + "\"}";
                #endregion
                break;

            default:
                resultJson = "{\"STATUS\":\"ERROR\",\"DATA\":\"NotImplemented\"}";
                break;
            }

            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ContentType = "application/json";
            HttpContext.Current.Response.Write(resultJson);
        }