Ejemplo n.º 1
0
        /**
         *
         * 网页授权获取用户基本信息的全部过程
         * 详情请参看网页授权获取用户基本信息:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
         * 第一步:利用url跳转获取code
         * 第二步:利用code去获取openid和access_token
         *
         */

        public void GetOpenidAndAccessToken(string state, out string url, string code = "")
        {
            url = "";

            if (!string.IsNullOrEmpty(code))
            {
                //获取code码,以获取openid和access_token
                Log.Debug(this.GetType().ToString(), "Get code : " + code);
                GetOpenidAndAccessTokenFromCode(code);
            }
            else if (!string.IsNullOrEmpty(Host) && !string.IsNullOrEmpty(Path))
            {
                //构造网页授权获取code的URL
                string    redirect_uri = HttpUtility.UrlEncode("http://" + Host + Path);
                WxPayData data         = new WxPayData();
                data.SetValue("appid", WxPayConfig.APPID);
                data.SetValue("redirect_uri", redirect_uri);
                data.SetValue("response_type", "code");
                data.SetValue("scope", "snsapi_base");
                data.SetValue("state", state + "#wechat_redirect");
                url = "https://open.weixin.qq.com/connect/oauth2/authorize?" + data.ToUrl();
                Log.Debug(this.GetType().ToString(), "Will Redirect to URL : " + url);
            }
        }
Ejemplo n.º 2
0
 //派生类需要重写这个方法,进行不同的回调处理
 public virtual void ProcessNotify(out WxPayData data)
 {
     data = null;
 }
Ejemplo n.º 3
0
        public override void ProcessNotify(out WxPayData data)
        {
            if (GetNotifyData(out data))
            {
                //检查支付结果中transaction_id是否存在
                if (!data.IsSet("transaction_id"))
                {
                    //若transaction_id不存在,则立即返回结果给微信支付后台
                    data = new WxPayData();
                    data.SetValue("return_code", "FAIL");
                    data.SetValue("return_msg", "支付结果中微信订单号不存在");

                    Log.Error(this.GetType().ToString(), "The Pay result is error : " + data.ToXml());

                    return;
                }

                string transaction_id = data.GetValue("transaction_id").ToString();

                //查询订单,判断订单真实性
                if (!QueryOrder(transaction_id))
                {
                    //若订单查询失败,则立即返回结果给微信支付后台
                    data = new WxPayData();
                    data.SetValue("return_code", "FAIL");
                    data.SetValue("return_msg", "订单查询失败");

                    Log.Error(this.GetType().ToString(), "Order query failure : " + data.ToXml());
                }
                //查询订单成功
                else
                {
                    string  mhtOrderNo = data.GetValue("out_trade_no").ToString();
                    decimal total_fee  = StringHelper.ToDecimal(data.GetValue("total_fee"));
                    if (!string.IsNullOrEmpty(mhtOrderNo))
                    {
                        int          result = 0;
                        RechargeInfo model  = new RechargeInfo();
                        model.OrderId   = mhtOrderNo;
                        model.FOrderId  = "";
                        model.Cash      = total_fee;
                        model.PayMobile = "";
                        _rechargeService.Completed(model, out result);     //1:成功 0:失败
                        if (result != (int)ErrorMessage.成功)
                        {
                            //失败
                            data = new WxPayData();
                            data.SetValue("return_code", "FAIL");
                            data.SetValue("return_msg", "订单查询失败");

                            Log.Error(this.GetType().ToString(), "Order query failure : " + data.ToXml());

                            return;
                        }
                    }

                    //成功
                    data.SetValue("return_code", "SUCCESS");
                    data.SetValue("return_msg", "OK");

                    Log.Info(this.GetType().ToString(), "order query success : " + data.ToXml());
                }
            }
        }