コード例 #1
0
 public string MakeSign(WeChatPayOptions option)
 {
     if (option.IsDebug)
     {
         string        url            = "https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey";
         WeChatPayData signkeyPayData = new WeChatPayData();
         signkeyPayData.SetValue("mch_id", option.MchID);                                                //商户号
         signkeyPayData.SetValue("nonce_str", Guid.NewGuid().ToString("N").ToLower());                   //随机字符串
         signkeyPayData.SetValue("sign", signkeyPayData.MakeSign("MD5", option.Key));
         string        response = (new HttpService(option)).Post(signkeyPayData.ToXml(), url, false, 6); //调用HTTP通信接口提交数据
         WeChatPayData result   = new WeChatPayData();
         result.FromXml(response);
         if (result.GetValue("return_code")?.ToString() == "SUCCESS")
         {
             var key = result.GetValue("sandbox_signkey")?.ToString();
             return(MakeSign(key));
         }
         throw new WeChatPayException("获取沙盒签名失败" + result.ToJson());
     }
     if ((this.GetValue("signType") ?? this.GetValue("sign_type"))?.ToString() != "MD5")
     {
         return(MakeSign(SIGN_TYPE_HMAC_SHA256, option.Key));
     }
     return(MakeSign(option.Key));
 }
コード例 #2
0
ファイル: WeChatPayApi.cs プロジェクト: xingx001/Sugar.WeChat
        /// <summary>
        /// 查询退款
        /// </summary>
        /// <remarks>提交退款申请后,通过该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态。 out_refund_no、out_trade_no、transaction_id、refund_id四个参数必填一个</remarks>
        /// <param name="inputObj">提交给查询退款API的参数</param>
        /// <param name="timeOut"> 接口超时时间</param>
        /// <returns></returns>
        internal WeChatPayData RefundQuery(WeChatPayData inputObj, int timeOut = 6)
        {
            string url = payHost + "/pay/refundquery";

            //检测必填参数
            if (!inputObj.IsSet("out_refund_no") && !inputObj.IsSet("out_trade_no") &&
                !inputObj.IsSet("transaction_id") && !inputObj.IsSet("refund_id"))
            {
                throw new WeChatException("退款查询接口中,out_refund_no、out_trade_no、transaction_id、refund_id四个参数必填一个!");
            }
            inputObj.SetValue("appid", option.AppId);                               //公众账号ID
            inputObj.SetValue("mch_id", option.MchID);                              //商户号
            inputObj.SetValue("nonce_str", Guid.NewGuid().ToString("N").ToLower()); //随机字符串
            inputObj.SetValue("sign_type", WeChatPayData.SIGN_TYPE_MD5);            //签名类型
            inputObj.SetValue("sign", inputObj.MakeSign(option));                   //签名
            string xml = inputObj.ToXml();

            logger.LogDebug("WxPayApi", "RefundQuery request : " + xml);
            string response = httpService.Post(xml, url, false, timeOut);//调用HTTP通信接口以提交数据到API

            logger.LogDebug("WxPayApi", "RefundQuery response : " + response);
            //将xml格式的结果转换为对象以返回
            WeChatPayData result = new WeChatPayData();

            result.FromXml(response);
            return(result);
        }
コード例 #3
0
ファイル: WeChatPayApi.cs プロジェクト: xingx001/Sugar.WeChat
        /// <summary>
        /// 撤销订单API接口
        /// </summary>
        /// <param name="inputObj"> 提交给撤销订单API接口的参数,out_trade_no和transaction_id必填一个</param>
        /// <param name="timeOut">接口超时时间</param>
        /// <returns></returns>
        internal WeChatPayData Reverse(WeChatPayData inputObj, int timeOut = 6)
        {
            string url = payHost + "/secapi/pay/reverse";

            //检测必填参数
            if (!inputObj.IsSet("out_trade_no") && !inputObj.IsSet("transaction_id"))
            {
                throw new WeChatException("撤销订单API接口中,参数out_trade_no和transaction_id必须填写一个!");
            }
            inputObj.SetValue("appid", option.AppId);                               //公众账号ID
            inputObj.SetValue("mch_id", option.MchID);                              //商户号
            inputObj.SetValue("nonce_str", Guid.NewGuid().ToString("N").ToLower()); //随机字符串
            inputObj.SetValue("sign_type", "MD5");                                  //签名类型
            inputObj.SetValue("sign", inputObj.MakeSign(option));                   //签名
            string xml = inputObj.ToXml();

            logger.LogDebug("WxPayApi", "Reverse request : " + xml);
            string response = httpService.Post(xml, url, true, timeOut);

            logger.LogDebug("WxPayApi", "Reverse response : " + response);
            WeChatPayData result = new WeChatPayData();

            result.FromXml(response);
            return(result);
        }
コード例 #4
0
ファイル: WeChatPayApi.cs プロジェクト: xingx001/Sugar.WeChat
        /// <summary>
        /// 关闭订单
        /// </summary>
        /// <param name="inputObj">提交给关闭订单API的参数</param>
        /// <param name="timeOut">接口超时时间</param>
        /// <returns></returns>
        internal WeChatPayData CloseOrder(WeChatPayData inputObj, int timeOut = 6)
        {
            string url = payHost + "/pay/closeorder";

            //检测必填参数
            if (!inputObj.IsSet("out_trade_no"))
            {
                throw new WeChatException("关闭订单接口中,out_trade_no必填!");
            }
            inputObj.SetValue("appid", option.AppId);                               //公众账号ID
            inputObj.SetValue("mch_id", option.MchID);                              //商户号
            inputObj.SetValue("nonce_str", Guid.NewGuid().ToString("N").ToLower()); //随机字符串
            inputObj.SetValue("sign_type", WeChatPayData.SIGN_TYPE_MD5);            //签名类型
            inputObj.SetValue("sign", inputObj.MakeSign(option));                   //签名
            string        xml      = inputObj.ToXml();
            string        response = httpService.Post(xml, url, false, timeOut);
            WeChatPayData result   = new WeChatPayData();

            result.FromXml(response);
            return(result);
        }
コード例 #5
0
 /// <summary>
 /// 判断是否已经支付成功了
 /// </summary>
 /// <param name="weChatPayed"></param>
 /// <returns></returns>
 public bool IsPayed(WeChatPayedParameters weChatPayed)
 {
     if (weChatPayed == null || weChatPayed.return_code != "SUCCESS")
     {
         return(false);
     }
     try
     {
         WeChatPayData data = new WeChatPayData();
         data.SetValue("out_trade_no", weChatPayed.out_trade_no);
         var queryresult = weChatPayApi.OrderQuery(data);
         logger.LogDebug("查询单据结果:" + queryresult.ToJson());
         return(queryresult.GetValue("trade_state")?.ToString() == "SUCCESS");
     }
     catch (Exception ex)
     {
         logger.LogError(ex.ToString());
         return(false);
     }
 }
コード例 #6
0
        private string GetPayParapeters(WeChatPayData unifiedOrder)
        {
            WeChatPayData jsApiParam = new WeChatPayData();

            jsApiParam.SetValue("appId", option.AppId);
            jsApiParam.SetValue("timeStamp", weChatPayApi.GenerateTimeStamp());
            jsApiParam.SetValue("nonceStr", Guid.NewGuid().ToString("N").ToLower());
            jsApiParam.SetValue("package", "prepay_id=" + unifiedOrder.GetValue("prepay_id"));
            jsApiParam.SetValue("signType", "MD5");
            jsApiParam.SetValue("paySign", jsApiParam.MakeSign(option));
            string parameters = jsApiParam.ToJson();

            logger.LogDebug("Get jsApiParam : " + parameters);
            return(parameters);
        }
コード例 #7
0
ファイル: WeChatPayApi.cs プロジェクト: xingx001/Sugar.WeChat
        private WeChatPayData GetWeChatPayData(string productDes, string billno, int total_fee, string ip, string tradeType, string openid = "")
        {
            WeChatPayData data = new WeChatPayData();

            data.SetValue("body", productDes);
            data.SetValue("out_trade_no", billno);
            data.SetValue("total_fee", total_fee);
            data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
            data.SetValue("time_expire", DateTime.Now.AddHours(25).ToString("yyyyMMddHHmmss"));
            data.SetValue("trade_type", tradeType);
            if (openid != "")
            {
                data.SetValue("openid", openid);
            }
            data.SetValue("notify_url", option.NotifyUrl);
            data.SetValue("appid", option.AppId);                               //公众账号ID
            data.SetValue("mch_id", option.MchID);                              //商户号
            data.SetValue("spbill_create_ip", ip);
            data.SetValue("nonce_str", Guid.NewGuid().ToString("N").ToLower()); //随机字符串
            data.SetValue("sign_type", WeChatPayData.SIGN_TYPE_MD5);            //签名类型
            //签名
            data.SetValue("sign", data.MakeSign(option));
            return(data);
        }