Esempio n. 1
0
        public JsonResult <PayOrder> Post(UnifiedOrder obj)
        {
            ClassLoger.Info("PayController.Post", obj.PayTyp.ToString(), obj.product_id, obj.productType.TryToString());
            JsonResult <PayOrder> result = new JsonResult <PayOrder>();

            result.code = 1;
            result.msg  = "OK";
            PayOrderBll porderbll = new PayOrderBll();

            try
            {
                if (obj.PayTyp == 1)
                {
                    JsApiPay jsApiPay = new JsApiPay();
                    jsApiPay.openid = "";
                    if (!obj.openid.IsNull())
                    {
                        WeChatUserBll wuserbll = new WeChatUserBll();
                        WeChatUser    wuser    = wuserbll.GetWeChatUserByUnionID(obj.openid);
                        jsApiPay.openid = wuser.ServiceOpenID;
                    }
                    else if (!obj.userid.IsNull())
                    {
                        UserInfoBll ubll = new UserInfoBll();
                        var         user = ubll.GetUserinfoByID(obj.userid);
                        if (!user.Openid.IsNull())
                        {
                            WeChatUserBll wuserbll = new WeChatUserBll();
                            WeChatUser    wuser    = wuserbll.GetWeChatUserByUnionID(user.Openid);
                            jsApiPay.openid = wuser.ServiceOpenID;
                        }
                    }
                    jsApiPay.total_fee  = 1;
                    jsApiPay.trade_type = obj.trade_type;
                    if (obj.productType == 1)
                    {
                        //查询商品信息,获取商品价格
                        double Price = 0.1;
                        jsApiPay.total_fee = (Price * 100).TryToInt();
                        jsApiPay.body      = "商品名称";
                    }
                    jsApiPay.attach = "北京xx";
                    string out_trade_no = porderbll.GetOnlineOrder(PayTypeEnum.WeChart);
                    jsApiPay.out_trade_no = out_trade_no;
                    jsApiPay.product_id   = obj.product_id;

                    ClassLoger.Info("api/Pay/UnifiedOrder", "total_fee", jsApiPay.total_fee.ToString());
                    WxPayData unifiedOrderResult = jsApiPay.GetUnifiedOrderResult();
                    PayOrder  porder             = new PayOrder();

                    if (unifiedOrderResult.GetValue("return_code").TryToString() == "SUCCESS" && unifiedOrderResult.GetValue("result_code").TryToString() == "SUCCESS")
                    {
                        if (unifiedOrderResult.IsSet("code_url"))
                        {
                            string code_url = unifiedOrderResult.GetValue("code_url").TryToString();
                            string filename = string.Format("WXPY{0}.png", code_url.MD5());
                            string filepath = Path.Combine(SystemSet.ResourcesPath, SystemSet.QrCodePic, filename);
                            if (!File.Exists(filepath))
                            {
                                QrCodeHelper.CreateImgCode(code_url, filepath);
                            }
                            porder.code_url = Path.Combine(SystemSet.WebResourcesSite, SystemSet.QrCodePic, filename);
                        }
                        porder.OnlineOrder = out_trade_no;
                        porder.openid      = obj.openid;
                        porder.PayState    = PayStateEnum.Unpaid;
                        porder.PayType     = PayTypeEnum.WeChart;
                        porder.prepay_id   = unifiedOrderResult.GetValue("prepay_id").TryToString();
                        porder.product_id  = obj.product_id;
                        porder.total_fee   = jsApiPay.total_fee;
                        porder.trade_type  = obj.trade_type;
                        porder.CreateTime  = DateTime.Now;
                        porder.UserID      = obj.userid;
                        porder.ID          = porderbll.AddPayOrder(porder);
                        result.Result      = porder;
                        return(result);
                    }
                    else
                    {
                        result.code      = 0;
                        result.msg       = unifiedOrderResult.GetValue("return_code").TryToString();
                        result.ResultMsg = unifiedOrderResult.GetValue("result_code").TryToString();
                    }
                }
            } catch (Exception ex)
            {
                result.code = -1;
                result.msg  = "PayController.unifiedorder:" + ex.Message;
            }
            return(result);
        }