コード例 #1
0
        public IHttpActionResult WeChatServicesRefundApi([FromBody] JToken json)
        {
            return(this.TryReturn <object>(() =>
            {
                try
                {
                    WxPayData wxp = new WxPayData();
                    //插入调用退款接口Json
                    wxp.WriteLogFile("调用退款Json:" + json.ToJsonString());
                    var arg = json.AsDynamic();
                    //订单号
                    string orderNo = arg.orderNo;
                    //查询要退款的单据
                    var selectOrderSql = string.Format(@"SELECT * FROM B_ORDER WHERE CODE='{0}' AND PAY_STATUS='已支付' AND IS_DELETE=0", orderNo, this.LoginUser.Cid);
                    wxp.WriteLogFile("执行单据退款查询SQL:" + selectOrderSql);
                    var recordList = new DataSet();
                    using (var x = MySqlProvider.X())
                    {
                        recordList = x.ExecuteSqlCommand(selectOrderSql);
                        x.Close();
                    }
                    var recordRows = recordList.Tables[0].DataSet.Rows().FirstOrDefault();
                    if (recordRows != null)
                    {
                        var item = recordRows;
                        var refundNo = "RFD" + orderNo;
                        //订单金额
                        string price = item["PRICE"].ToString();

                        var data = WxPayData.ForRefund(double.Parse(price), double.Parse(price), orderNo, refundNo);
                        var url = GlobalVariableWeChatApplets.REFUND_URL;
                        var xml = data.ToXml();
                        var response = HttpService.PostByCertificates(xml, url, 6);
                        var preOrder = WxPayData.FromXml(response, "HMAC-SHA256");
                        var backCode = preOrder.GetValue("return_code");
                        if (backCode != null && backCode.ToString() == "FAIL")
                        {
                            var returnMsg = preOrder.GetValue("return_msg").ToString();
                            return new { Table = new { IsSuccess = false, ErroMessage = returnMsg, MSG = "" } };
                        }
                        else
                        {
                            var payData = WxPayData.ForWechatRefund(preOrder);
                            var orderString = payData.ToJson();
                            return new { Table = new { IsSuccess = true, ErroMessage = "", MSG = orderString } };
                        }
                    }
                    else
                    {
                        return new { Table = new { IsSuccess = false, ErroMessage = "未查询到需要退款的数据", MSG = "" } };
                    }
                }
                catch (Exception ex)
                {
                    return new { Table = new { IsSuccess = false, ErroMessage = ex.Message, Json = "" } };
                }
            }));
        }
コード例 #2
0
        public static WxPayData ForWechatRefund(WxPayData preOrder)
        {
            var result = new WxPayData();

            result.SetValue("appId", preOrder.GetValue("appid"));             //公众账号ID
            result.SetValue("nonceStr", GenerateNonceStr());                  //随机字符串
            result.SetValue("timeStamp", ConvertDateTimeInt(DateTime.Now));   //时间戳
            result.SetValue("sign_type", "HMAC-SHA256");                      //签名类型
            result.SetValue("paySign", result.WechatMakeSignByHMAC_SHA256()); //签名
            result.WriteLogFile("ForWechatPay:" + result.ToJson());
            return(result);
        }
コード例 #3
0
        /// <summary>
        /// 退款
        /// </summary>
        public static WxPayData ForRefund(double price, double refundPrice, string orderNo, string refundNo)
        {
            var url            = System.Configuration.ConfigurationManager.AppSettings["notify_url"];
            var fee            = Convert.ToInt32(price * 100);
            var refundPriceFee = Convert.ToInt32(refundPrice * 100);
            var result         = new WxPayData();

            result.SetValue("appid", GlobalVariableWeChatApplets.APPID);   //服务商的APPID
            result.SetValue("mch_id", GlobalVariableWeChatApplets.MCH_ID); //商户号
            result.SetValue("nonce_str", GenerateNonceStr());              //随机字符串
            result.SetValue("out_trade_no", orderNo);                      //订单号
            result.SetValue("out_refund_no", refundNo);                    // "{'cid':" + cid + ",'crt_code':" + loginCode + ",'refNo':" + refundNo + " }");//商户退款单号(拼接CID CODE)
            result.SetValue("total_fee", fee);                             //订单金额
            result.SetValue("refund_fee", refundPriceFee);                 //退款金额
            result.SetValue("notify_url", url + "/api/_wxp/refundApi");    //退款通知url
            //签名
            result.SetValue("sign_type", "HMAC-SHA256");                   //签名类型
            result.SetValue("sign", result.WechatMakeSignByHMAC_SHA256()); //签名
            result.WriteLogFile("退款Json:" + result.ToJson());
            return(result);
        }
コード例 #4
0
        public static WxPayData ForApplets(double price, string openId, string orderNo, string ip, string attach)
        {
            var url    = System.Configuration.ConfigurationManager.AppSettings["notify_url"];
            var fee    = Convert.ToInt32(price * 100);
            var result = new WxPayData();

            result.SetValue("trade_type", "JSAPI");                         //交易类型
            result.SetValue("appid", GlobalVariableWeChatApplets.APPID);
            result.SetValue("mch_id", GlobalVariableWeChatApplets.MCH_ID);  //商户号
            result.SetValue("nonce_str", GenerateNonceStr());               //随机字符串
            result.SetValue("body", "小程序下单");                               //商品描述
            result.SetValue("out_trade_no", orderNo);                       //订单号
            result.SetValue("total_fee", fee);                              //总金额
            result.SetValue("openid", openId);                              //用户openId
            result.SetValue("attach", attach);                              //附加数据
            result.SetValue("spbill_create_ip", ip);                        //终端ip
            result.SetValue("notify_url", url + "/api/_wxp/tenpay_notify"); //异步通知url
            result.SetValue("sign_type", "HMAC-SHA256");                    //签名类型
            result.SetValue("sign", result.WechatMakeSignByHMAC_SHA256());  //签名
            result.WriteLogFile("ForApplets:" + result.ToJson());
            return(result);
        }
コード例 #5
0
        public IHttpActionResult WeChatServicesPayApi([FromBody] JToken json)
        {
            return(this.TryReturn <object>(() =>
            {
                try
                {
                    WxPayData wxp = new WxPayData();
                    wxp.WriteLogFile("调用支付Json:" + json.ToJsonString());
                    var arg = json.AsDynamic();
                    var ip = GetClientIpAddress();
                    //金额
                    string price = arg.price;
                    //订单号
                    string orderNo = arg.orderNo;
                    //产品ID
                    string productId = arg.productId;
                    //买家ID
                    string buyUserId = arg.buyUserId;
                    //JsCode
                    string jsCode = arg.jsCode;
                    //获取OpenId
                    var openId = WxPayData.GetOpenId(jsCode).openid;
                    if (openId == "" || openId == null)
                    {
                        var msg = "JSCODE " + jsCode + "获取不到openId";
                        wxp.WriteLogFile(msg);
                        return new { Table = new { MSG = "", IsSuccess = false, ErroMessage = msg } };
                    }
                    #region 锁定产品状态
                    //执行sql
                    using (var x = Join.Dal.MySqlProvider.X())
                    {
                        //获取产品ID 查询产品是否在上架时间并且状态为上架中
                        var nowDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                        var selectProductSql = "select * from B_PRODUCT_LIST where status='上架中' and kid='" + productId + "' and OFF_SHELF_TIME > '" + nowDate + "'";
                        var selectProductTables = x.ExecuteSqlCommand(selectProductSql);
                        if (selectProductTables.Tables[0].Rows.Count > 0)
                        {
                            //执行调用付款
                            //构造附加数据
                            string attach = productId + "|" + buyUserId;
                            var url = GlobalVariableWeChatApplets.UNIFIEDORDER_URL;
                            var data = WxPayData.ForApplets(double.Parse(price), openId, orderNo, ip, attach);
                            var xml = data.ToXml();
                            var response = HttpService.Post(xml, url, 6);
                            var preOrder = WxPayData.FromXml(response, "HMAC-SHA256");
                            var errCode = preOrder.GetValue("err_code");
                            if (errCode != null)
                            {
                                var errMsg = preOrder.GetValue("err_code_des");
                                return new { Table = new { MSG = "", IsSuccess = false, ErroMessage = errMsg } };
                            }
                            else
                            {
                                //如果调起支付成功,锁定产品状态为已锁定
                                var updateProductSql = "update b_product_list set status='已锁定',LOCK_TIME='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "' where kid = '" + productId + "'";
                                x.ExecuteSqlCommand(updateProductSql);

                                var payData = WxPayData.ForWechatPay(preOrder);
                                var orderString = payData.ToJson();
                                return new { Table = new { MSG = orderString, IsSuccess = true, ErroMessage = string.Empty } };
                            }
                        }
                        else
                        {
                            return new { Table = new { MSG = "", IsSuccess = false, ErroMessage = "产品已下架。" } };
                        }
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    return new { Table = new { MSG = "", IsSuccess = false, ErroMessage = ex.Message } };
                }
            }));
        }