Commit c281b81f authored by 吴春's avatar 吴春

提交代码

parent 6bbf9622
...@@ -28,13 +28,74 @@ namespace Mall.WebApi.App_Code ...@@ -28,13 +28,74 @@ namespace Mall.WebApi.App_Code
/// 商户小程序处理类 /// 商户小程序处理类
/// </summary> /// </summary>
private Module.User.MiniProgramModule programModule = new Module.User.MiniProgramModule(); private Module.User.MiniProgramModule programModule = new Module.User.MiniProgramModule();
public PayUtil() { } public PayUtil() { }
/// <summary>
/// 微信小程序支付
/// </summary>
/// <param name="sOrderNo"></param>
/// <param name="sProductName"></param>
/// <param name="dPrice"></param>
/// <param name="CustomerId"></param>
/// <param name="openid"></param>
/// <returns></returns>
public static string GetMinUnifiedOrder(string sOrderNo, string sProductName, decimal dPrice, string CustomerId, string openid, RB_MiniProgram_Extend model, IHttpContextAccessor _accessor)
{
App_Code.PayUtil payUtil = new App_Code.PayUtil();
var req = new Common.Pay.WeChatPat.RequestHandler();
req.SetKey(model.WeChatApiSecret);
//
req.SetParameter("appid", model.MiniAppId);//微信开放平台审核通过的应用APPID
req.SetParameter("mch_id", model.WeChatPayMerchants);//微信支付分配的商户号
req.SetParameter("nonce_str", payUtil.GetNoncestr());//随机字符串,不长于32位
req.SetParameter("body", sProductName);
req.SetParameter("attach", CustomerId);
req.SetParameter("out_trade_no", sOrderNo);
req.SetParameter("total_fee", (dPrice * 100).ToString("f0"));
req.SetParameter("spbill_create_ip", _accessor.HttpContext.Connection.RemoteIpAddress.ToString());
req.SetParameter("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
req.SetParameter("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
req.SetParameter("notify_url", Config.sTenpayNotify);
req.SetParameter("trade_type", "JSAPI");
req.SetParameter("openid", openid);
req.SetParameter("sign", req.CreateMd5Sign(_accessor));
var reqXml = req.ParseXml();
var result = Common.Pay.WeChatPat.HttpHelper.Post(new HttpParam()
{
Url = Mall.Common.Pay.WeChatPat.Model.ApiList.UnifiedOrderUrl,
PostParam = reqXml,
Encoding = Common.Pay.WeChatPat.HttpHelper.GetRequestEncoding(_accessor.HttpContext.Request),
});
var xe = XElement.Parse(result, LoadOptions.SetLineInfo);
LogHelper.Write(null, "订单号【" + sOrderNo + "】支付错误:" + xe);
try
{
var prepayId = xe.GetElement("return_code").Value;
var payReq = new RequestHandler();
payReq.SetParameter("appId", model.MiniAppId);
//创建签名
payReq.SetParameter("sign", payReq.CreateMd5Sign(_accessor));
var payReqXml = payReq.ParseXml();
var payReqJson = payReq.ParseJson();
return payReqJson;
}
catch (Exception)
{
var returnCode = xe.GetElement("return_code").Value;
var returnMsg = xe.GetElement("return_msg").Value;
return "{Error:'" + returnCode + returnMsg + "'}";
}
}
...@@ -49,9 +110,8 @@ namespace Mall.WebApi.App_Code ...@@ -49,9 +110,8 @@ namespace Mall.WebApi.App_Code
var res = new ResponseHandler(); var res = new ResponseHandler();
var tradeType = res.GetParameter("trade_type"); var tradeType = res.GetParameter("trade_type");
RB_MiniProgram_Extend model = new RB_MiniProgram_Extend();
//根据订单号获取微信支付配置信息 model = programModule.GetMiniProgramModule(new RB_MiniProgram_Extend { MallBaseId = 0, TenantId =0 });
RB_MiniProgram model = new RB_MiniProgram(); //2020年5月26号新增逻辑还没有写完
//if (tradeType.Equals("APP")) //if (tradeType.Equals("APP"))
// res.SetKey(EheMall.WeChat.Common.WeChatConfig.GetOpenKey()); // res.SetKey(EheMall.WeChat.Common.WeChatConfig.GetOpenKey());
//if (tradeType.Equals("MWEB")) //if (tradeType.Equals("MWEB"))
...@@ -143,7 +203,7 @@ namespace Mall.WebApi.App_Code ...@@ -143,7 +203,7 @@ namespace Mall.WebApi.App_Code
// <summary> // <summary>
/// 传入订单号OrderNumber,RefundNumber,总金额total_fee(分),RefundFee退款金额(分), /// 退款 传入订单号OrderNumber,RefundNumber,总金额total_fee(分),RefundFee退款金额(分),
/// </summary> /// </summary>
/// <param name="param"></param> /// <param name="param"></param>
/// <returns></returns> /// <returns></returns>
...@@ -234,6 +294,70 @@ namespace Mall.WebApi.App_Code ...@@ -234,6 +294,70 @@ namespace Mall.WebApi.App_Code
/// <summary>
/// 企业付款
/// </summary>
/// <param name="sOrderNo"></param>
/// <param name="sProductName"></param>
/// <param name="dPrice"></param>
/// <param name="CustomerId"></param>
/// <param name="openid"></param>
/// <returns></returns>
private string GetTransfersOrder(string sOrderNo, string sProductName, decimal dPrice, string CustomerId, string openid, RB_MiniProgram_Extend model, IHttpContextAccessor _accessor)
{
App_Code.PayUtil payUtil = new App_Code.PayUtil();
var req = new Common.Pay.WeChatPat.RequestHandler();
req.SetKey(model.WeChatApiSecret);
//
req.SetParameter("mch_appid", model.MiniAppId);//微信开放平台审核通过的应用APPID
req.SetParameter("mchid", model.WeChatPayMerchants);//微信支付分配的商户号
req.SetParameter("nonce_str", payUtil.GetNoncestr());//随机字符串,不长于32位
req.SetParameter("sign", req.CreateMd5Sign(_accessor));
req.SetParameter("partner_trade_no", sProductName);//商户订单号,需保持唯一性(只能是字母或者数字,不能包含有其它字符)
req.SetParameter("openid", openid);
req.SetParameter("check_name", "NO_CHECK");
req.SetParameter("amount", (dPrice * 100).ToString("f0"));
req.SetParameter("desc", "赞羊商城佣金提现");
var reqXml = req.ParseXml();
var result = Common.Pay.WeChatPat.HttpHelper.Post(new HttpParam()
{
Url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers",
PostParam = reqXml,
Encoding = Common.Pay.WeChatPat.HttpHelper.GetRequestEncoding(_accessor.HttpContext.Request),
CertPath = model.WeChatPayCertificateUrl,
CertPwd = model.WeChatApiSecret
});
var xe = XElement.Parse(result, LoadOptions.SetLineInfo);
LogHelper.Write(null, "订单号【" + sOrderNo + "】支付错误:" + xe);
try
{
var prepayId = xe.GetElement("prepay_id").Value;
var payReq = new RequestHandler();
payReq.SetKey(model.WeChatApiSecret);
payReq.SetParameter("appId", model.MiniAppId);
// req.SetParameter("mch_id", EheMall.WeChat.Common.WeChatConfig.GetOpenMchID());//微信支付分配的商户号
payReq.SetParameter("timeStamp", payUtil.GetTimestamp());
payReq.SetParameter("nonceStr", payUtil.GetNoncestr());
payReq.SetParameter("package", "prepay_id=" + prepayId);
payReq.SetParameter("signType", "MD5");
//创建签名
payReq.SetParameter("sign", payReq.CreateMd5Sign(_accessor));
var payReqXml = payReq.ParseXml();
var payReqJson = payReq.ParseJson();
return payReqJson;
}
catch (Exception)
{
var returnCode = xe.GetElement("return_code").Value;
var returnMsg = xe.GetElement("return_msg").Value;
return "{Error:'" + returnCode + returnMsg + "'}";
}
}
/// <summary> /// <summary>
...@@ -250,7 +374,7 @@ namespace Mall.WebApi.App_Code ...@@ -250,7 +374,7 @@ namespace Mall.WebApi.App_Code
/// 获取时间戳 /// 获取时间戳
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public string GetTimestamp() public string GetTimestamp()
{ {
var ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); var ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalSeconds).ToString(CultureInfo.InvariantCulture); return Convert.ToInt64(ts.TotalSeconds).ToString(CultureInfo.InvariantCulture);
...@@ -262,7 +386,7 @@ namespace Mall.WebApi.App_Code ...@@ -262,7 +386,7 @@ namespace Mall.WebApi.App_Code
/// <param name="instr"></param> /// <param name="instr"></param>
/// <param name="charset">默认值:utf-8</param> /// <param name="charset">默认值:utf-8</param>
/// <returns></returns> /// <returns></returns>
public string UrlEncode(string instr, string charset) public string UrlEncode(string instr, string charset)
{ {
if (instr == null || instr.Trim() == "") if (instr == null || instr.Trim() == "")
return ""; return "";
......
...@@ -19,7 +19,7 @@ namespace Mall.WebApi.Controllers.AppletWeChat ...@@ -19,7 +19,7 @@ namespace Mall.WebApi.Controllers.AppletWeChat
private static object _lock = new object(); private static object _lock = new object();
UserCommonModule userCommonModule = new UserCommonModule(); UserCommonModule userCommonModule = new UserCommonModule();
/// <summary> /// <summary>
/// 订单支付回调 /// 订单支付回调
/// </summary> /// </summary>
......
...@@ -93,7 +93,7 @@ namespace Mall.WebApi.Controllers.AppletWeChat ...@@ -93,7 +93,7 @@ namespace Mall.WebApi.Controllers.AppletWeChat
switch ((int)demodel.OrderPayType) switch ((int)demodel.OrderPayType)
{ {
case 1://微信支付 case 1://微信支付
sPayInfo = GetMinUnifiedOrder(sOrderNo, demodel.GoodsName, model.Income.Value, model.UserId.ToString(), demodel.OpenId, miniProgram); sPayInfo = App_Code.PayUtil.GetMinUnifiedOrder(sOrderNo, demodel.GoodsName, model.Income.Value, model.UserId.ToString(), demodel.OpenId, miniProgram, _accessor);
break; break;
default: default:
break; break;
...@@ -104,140 +104,14 @@ namespace Mall.WebApi.Controllers.AppletWeChat ...@@ -104,140 +104,14 @@ namespace Mall.WebApi.Controllers.AppletWeChat
/// <summary>
/// 微信小程序支付
/// </summary>
/// <param name="sOrderNo"></param>
/// <param name="sProductName"></param>
/// <param name="dPrice"></param>
/// <param name="CustomerId"></param>
/// <param name="openid"></param>
/// <returns></returns>
private string GetMinUnifiedOrder(string sOrderNo, string sProductName, decimal dPrice, string CustomerId, string openid, RB_MiniProgram_Extend model)
{
App_Code.PayUtil payUtil = new App_Code.PayUtil();
var req = new Common.Pay.WeChatPat.RequestHandler();
req.SetKey(model.WeChatApiSecret);
//
req.SetParameter("appid", model.MiniAppId);//微信开放平台审核通过的应用APPID
req.SetParameter("mch_id", model.WeChatPayMerchants);//微信支付分配的商户号
req.SetParameter("nonce_str", payUtil.GetNoncestr());//随机字符串,不长于32位
req.SetParameter("body", sProductName);
req.SetParameter("attach", CustomerId);
req.SetParameter("out_trade_no", sOrderNo);
req.SetParameter("total_fee", (dPrice * 100).ToString("f0"));
req.SetParameter("spbill_create_ip", _accessor.HttpContext.Connection.RemoteIpAddress.ToString());
req.SetParameter("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
req.SetParameter("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
req.SetParameter("notify_url", Config.sTenpayNotify);
req.SetParameter("trade_type", "JSAPI");
req.SetParameter("openid", openid);
req.SetParameter("sign", req.CreateMd5Sign(_accessor));
var reqXml = req.ParseXml();
var result = Common.Pay.WeChatPat.HttpHelper.Post(new HttpParam()
{
Url = Mall.Common.Pay.WeChatPat.Model.ApiList.UnifiedOrderUrl,
PostParam = reqXml,
Encoding = Common.Pay.WeChatPat.HttpHelper.GetRequestEncoding(_accessor.HttpContext.Request),
// Encoding = HttpContext.Current.Request.ContentEncoding
});
var xe = XElement.Parse(result, LoadOptions.SetLineInfo);
LogHelper.Write(null, "订单号【" + sOrderNo + "】支付错误:" + xe);
try
{
var prepayId = xe.GetElement("return_code").Value;
var payReq = new RequestHandler();
payReq.SetParameter("appId", model.MiniAppId);
//创建签名
payReq.SetParameter("sign", payReq.CreateMd5Sign(_accessor));
var payReqXml = payReq.ParseXml();
var payReqJson = payReq.ParseJson();
return payReqJson;
}
catch (Exception)
{
var returnCode = xe.GetElement("return_code").Value;
var returnMsg = xe.GetElement("return_msg").Value;
return "{Error:'" + returnCode + returnMsg + "'}";
}
}
/// <summary>
/// 企业付款
/// </summary>
/// <param name="sOrderNo"></param>
/// <param name="sProductName"></param>
/// <param name="dPrice"></param>
/// <param name="CustomerId"></param>
/// <param name="openid"></param>
/// <returns></returns>
private string GetTransfersOrder(string sOrderNo, string sProductName, decimal dPrice, string CustomerId, string openid, RB_MiniProgram_Extend model)
{
App_Code.PayUtil payUtil = new App_Code.PayUtil();
var req = new Common.Pay.WeChatPat.RequestHandler();
req.SetKey(model.WeChatApiSecret);
//
req.SetParameter("mch_appid", model.MiniAppId);//微信开放平台审核通过的应用APPID
req.SetParameter("mchid", model.WeChatPayMerchants);//微信支付分配的商户号
req.SetParameter("nonce_str", payUtil.GetNoncestr());//随机字符串,不长于32位
req.SetParameter("sign", req.CreateMd5Sign(_accessor));
req.SetParameter("partner_trade_no", sProductName);//商户订单号,需保持唯一性(只能是字母或者数字,不能包含有其它字符)
req.SetParameter("openid", openid);
req.SetParameter("check_name", "NO_CHECK");
req.SetParameter("amount", (dPrice * 100).ToString("f0"));
req.SetParameter("desc", "赞羊商城佣金提现");
var reqXml = req.ParseXml();
var result = Common.Pay.WeChatPat.HttpHelper.Post(new HttpParam()
{
Url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers",
PostParam = reqXml,
Encoding = Common.Pay.WeChatPat.HttpHelper.GetRequestEncoding(_accessor.HttpContext.Request),
CertPath = model.WeChatPayCertificateUrl,
CertPwd = model.WeChatApiSecret
});
var xe = XElement.Parse(result, LoadOptions.SetLineInfo);
LogHelper.Write(null, "订单号【" + sOrderNo + "】支付错误:" + xe);
try
{
var prepayId = xe.GetElement("prepay_id").Value;
var payReq = new RequestHandler();
payReq.SetKey(model.WeChatApiSecret);
payReq.SetParameter("appId", model.MiniAppId);
// req.SetParameter("mch_id", EheMall.WeChat.Common.WeChatConfig.GetOpenMchID());//微信支付分配的商户号
payReq.SetParameter("timeStamp", payUtil.GetTimestamp());
payReq.SetParameter("nonceStr", payUtil.GetNoncestr());
payReq.SetParameter("package", "prepay_id=" + prepayId);
payReq.SetParameter("signType", "MD5");
//创建签名
payReq.SetParameter("sign", payReq.CreateMd5Sign(_accessor));
var payReqXml = payReq.ParseXml();
var payReqJson = payReq.ParseJson();
return payReqJson;
}
catch (Exception)
{
var returnCode = xe.GetElement("return_code").Value;
var returnMsg = xe.GetElement("return_msg").Value;
return "{Error:'" + returnCode + returnMsg + "'}";
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment