Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mall.oytour.com
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄奎
mall.oytour.com
Commits
6bbf9622
Commit
6bbf9622
authored
May 28, 2020
by
吴春
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提交退款
parent
b27b92ea
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
93 additions
and
100 deletions
+93
-100
PayUtil.cs
Mall.WebApi/App_Code/PayUtil.cs
+92
-11
WeChatPayController.cs
Mall.WebApi/Controllers/AppletWeChat/WeChatPayController.cs
+1
-89
No files found.
Mall.WebApi/App_Code/PayUtil.cs
View file @
6bbf9622
...
@@ -28,15 +28,7 @@ namespace Mall.WebApi.App_Code
...
@@ -28,15 +28,7 @@ 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
();
private
IHttpContextAccessor
_accessor
;
/// <summary>
/// 构造函数
/// </summary>
public
PayUtil
(
IHttpContextAccessor
accessor
)
{
_accessor
=
accessor
;
}
public
PayUtil
()
{
}
public
PayUtil
()
{
}
...
@@ -150,16 +142,105 @@ namespace Mall.WebApi.App_Code
...
@@ -150,16 +142,105 @@ namespace Mall.WebApi.App_Code
// <summary>
/// 传入订单号OrderNumber,RefundNumber,总金额total_fee(分),RefundFee退款金额(分),
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
public
BaseResult
Refund
(
PayParam
param
,
RB_MiniProgram_Extend
model
,
IHttpContextAccessor
_accessor
)
{
App_Code
.
PayUtil
payUtil
=
new
App_Code
.
PayUtil
();
if
(
param
.
TotalFee
==
null
||
param
.
RefundFee
==
null
||
string
.
IsNullOrWhiteSpace
(
param
.
OrderNumber
)
||
string
.
IsNullOrWhiteSpace
(
param
.
RefundNumber
))
{
return
new
BaseResult
()
{
IsSuccess
=
false
,
Message
=
"参数错误!"
};
}
#
region
微信退款
var
packageReq
=
new
RequestHandler
();
packageReq
.
SetKey
(
model
.
WeChatApiSecret
);
packageReq
.
SetParameter
(
"appid"
,
model
.
MiniAppId
);
packageReq
.
SetParameter
(
"mch_id"
,
model
.
WeChatPayMerchants
);
packageReq
.
SetParameter
(
"nonce_str"
,
payUtil
.
GetNoncestr
());
//packageReq.SetParameter("transaction_id", param.OrderNumber);
packageReq
.
SetParameter
(
"out_trade_no"
,
param
.
OrderNumber
);
packageReq
.
SetParameter
(
"out_refund_no"
,
param
.
RefundNumber
);
packageReq
.
SetParameter
(
"total_fee"
,
(
param
.
TotalFee
.
Value
).
ToString
(
System
.
Globalization
.
CultureInfo
.
InvariantCulture
));
packageReq
.
SetParameter
(
"refund_fee"
,
param
.
RefundFee
.
Value
.
ToString
(
System
.
Globalization
.
CultureInfo
.
InvariantCulture
));
packageReq
.
SetParameter
(
"sign"
,
packageReq
.
CreateMd5Sign
(
_accessor
));
var
reqXml
=
packageReq
.
ParseXml
();
var
result
=
Common
.
Pay
.
WeChatPat
.
HttpHelper
.
Post
(
new
HttpParam
()
{
Url
=
"https://api.mch.weixin.qq.com/secapi/pay/refund"
,
PostParam
=
reqXml
,
Encoding
=
Common
.
Pay
.
WeChatPat
.
HttpHelper
.
GetRequestEncoding
(
_accessor
.
HttpContext
.
Request
),
CertPath
=
model
.
WeChatPayCertificateUrl
,
CertPwd
=
model
.
WeChatApiSecret
});
var
xe
=
XElement
.
Parse
(
result
,
LoadOptions
.
SetLineInfo
);
var
returnCode
=
xe
.
GetElement
(
"return_code"
).
Value
;
//退款成功
if
(
returnCode
.
Equals
(
"SUCCESS"
))
{
var
resultCode
=
xe
.
GetElement
(
"result_code"
).
Value
;
if
(
resultCode
.
Equals
(
"SUCCESS"
))
{
var
outTradeNo
=
xe
.
GetElement
(
"out_trade_no"
).
Value
;
//在外面回写订单
return
new
BaseResult
()
{
IsSuccess
=
true
,
Data
=
new
Dictionary
<
string
,
string
>
{
{
"OrderNumber"
,
outTradeNo
}
}
};
}
}
else
{
//查询退款情况
packageReq
=
new
RequestHandler
();
packageReq
.
SetKey
(
model
.
WeChatApiSecret
);
packageReq
.
SetParameter
(
"appid"
,
model
.
MiniAppId
);
packageReq
.
SetParameter
(
"mch_id"
,
model
.
WeChatPayMerchants
);
packageReq
.
SetParameter
(
"nonce_str"
,
payUtil
.
GetNoncestr
());
packageReq
.
SetParameter
(
"sign"
,
packageReq
.
CreateMd5Sign
(
_accessor
));
packageReq
.
SetParameter
(
"out_refund_no"
,
param
.
RefundNumber
);
reqXml
=
packageReq
.
ParseXml
();
result
=
Common
.
Pay
.
WeChatPat
.
HttpHelper
.
Post
(
new
HttpParam
()
{
Url
=
"https://api.mch.weixin.qq.com/pay/refundquery"
,
PostParam
=
reqXml
,
Encoding
=
Common
.
Pay
.
WeChatPat
.
HttpHelper
.
GetRequestEncoding
(
_accessor
.
HttpContext
.
Request
),
});
xe
=
XElement
.
Parse
(
result
,
LoadOptions
.
SetLineInfo
);
returnCode
=
xe
.
GetElement
(
"return_code"
).
Value
;
if
(
returnCode
.
Equals
(
"SUCCESS"
))
{
}
}
var
errCodeDes
=
xe
.
GetElement
(
"err_code_des"
)
==
null
?
""
:
xe
.
GetElement
(
"err_code_des"
).
Value
;
var
returnMsg
=
xe
.
GetElement
(
"return_msg"
)
==
null
?
""
:
xe
.
GetElement
(
"return_msg"
).
Value
;
return
new
BaseResult
()
{
IsSuccess
=
false
,
Message
=
returnMsg
+
errCodeDes
};
#
endregion
}
/// <summary>
/// <summary>
/// 获取随机字符串
/// 获取随机字符串
/// </summary>
/// </summary>
/// <returns></returns>
/// <returns></returns>
public
string
GetNoncestr
()
public
string
GetNoncestr
()
{
{
var
random
=
new
Random
();
var
random
=
new
Random
();
return
SecurityHelper
.
MD5EncryptWeChat
(
random
.
Next
(
1000
).
ToString
(
CultureInfo
.
InvariantCulture
),
"GBK"
);
return
SecurityHelper
.
MD5EncryptWeChat
(
random
.
Next
(
1000
).
ToString
(
CultureInfo
.
InvariantCulture
),
"GBK"
);
...
...
Mall.WebApi/Controllers/AppletWeChat/WeChatPayController.cs
View file @
6bbf9622
...
@@ -237,95 +237,7 @@ namespace Mall.WebApi.Controllers.AppletWeChat
...
@@ -237,95 +237,7 @@ namespace Mall.WebApi.Controllers.AppletWeChat
// <summary>
/// 传入订单号OrderNumber,RefundNumber,总金额total_fee(分),RefundFee退款金额(分),
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
public
BaseResult
Refund
(
PayParam
param
,
RB_MiniProgram_Extend
model
)
{
App_Code
.
PayUtil
payUtil
=
new
App_Code
.
PayUtil
();
if
(
param
.
TotalFee
==
null
||
param
.
RefundFee
==
null
||
string
.
IsNullOrWhiteSpace
(
param
.
OrderNumber
)
||
string
.
IsNullOrWhiteSpace
(
param
.
RefundNumber
))
{
return
new
BaseResult
()
{
IsSuccess
=
false
,
Message
=
"参数错误!"
};
}
#
region
微信退款
var
packageReq
=
new
RequestHandler
();
packageReq
.
SetKey
(
model
.
WeChatApiSecret
);
packageReq
.
SetParameter
(
"appid"
,
model
.
MiniAppId
);
packageReq
.
SetParameter
(
"mch_id"
,
model
.
WeChatPayMerchants
);
packageReq
.
SetParameter
(
"nonce_str"
,
payUtil
.
GetNoncestr
());
//packageReq.SetParameter("transaction_id", param.OrderNumber);
packageReq
.
SetParameter
(
"out_trade_no"
,
param
.
OrderNumber
);
packageReq
.
SetParameter
(
"out_refund_no"
,
param
.
RefundNumber
);
packageReq
.
SetParameter
(
"total_fee"
,
(
param
.
TotalFee
.
Value
).
ToString
(
System
.
Globalization
.
CultureInfo
.
InvariantCulture
));
packageReq
.
SetParameter
(
"refund_fee"
,
param
.
RefundFee
.
Value
.
ToString
(
System
.
Globalization
.
CultureInfo
.
InvariantCulture
));
packageReq
.
SetParameter
(
"sign"
,
packageReq
.
CreateMd5Sign
(
_accessor
));
var
reqXml
=
packageReq
.
ParseXml
();
var
result
=
Common
.
Pay
.
WeChatPat
.
HttpHelper
.
Post
(
new
HttpParam
()
{
Url
=
"https://api.mch.weixin.qq.com/secapi/pay/refund"
,
PostParam
=
reqXml
,
Encoding
=
Common
.
Pay
.
WeChatPat
.
HttpHelper
.
GetRequestEncoding
(
_accessor
.
HttpContext
.
Request
),
CertPath
=
model
.
WeChatPayCertificateUrl
,
CertPwd
=
model
.
WeChatApiSecret
});
var
xe
=
XElement
.
Parse
(
result
,
LoadOptions
.
SetLineInfo
);
var
returnCode
=
xe
.
GetElement
(
"return_code"
).
Value
;
//退款成功
if
(
returnCode
.
Equals
(
"SUCCESS"
))
{
var
resultCode
=
xe
.
GetElement
(
"result_code"
).
Value
;
if
(
resultCode
.
Equals
(
"SUCCESS"
))
{
var
outTradeNo
=
xe
.
GetElement
(
"out_trade_no"
).
Value
;
//在外面回写订单
return
new
BaseResult
()
{
IsSuccess
=
true
,
Data
=
new
Dictionary
<
string
,
string
>
{
{
"OrderNumber"
,
outTradeNo
}
}
};
}
}
else
{
//查询退款情况
packageReq
=
new
RequestHandler
();
packageReq
.
SetKey
(
model
.
WeChatApiSecret
);
packageReq
.
SetParameter
(
"appid"
,
model
.
MiniAppId
);
packageReq
.
SetParameter
(
"mch_id"
,
model
.
WeChatPayMerchants
);
packageReq
.
SetParameter
(
"nonce_str"
,
payUtil
.
GetNoncestr
());
packageReq
.
SetParameter
(
"sign"
,
packageReq
.
CreateMd5Sign
(
_accessor
));
packageReq
.
SetParameter
(
"out_refund_no"
,
param
.
RefundNumber
);
reqXml
=
packageReq
.
ParseXml
();
result
=
Common
.
Pay
.
WeChatPat
.
HttpHelper
.
Post
(
new
HttpParam
()
{
Url
=
"https://api.mch.weixin.qq.com/pay/refundquery"
,
PostParam
=
reqXml
,
Encoding
=
Common
.
Pay
.
WeChatPat
.
HttpHelper
.
GetRequestEncoding
(
_accessor
.
HttpContext
.
Request
),
});
xe
=
XElement
.
Parse
(
result
,
LoadOptions
.
SetLineInfo
);
returnCode
=
xe
.
GetElement
(
"return_code"
).
Value
;
if
(
returnCode
.
Equals
(
"SUCCESS"
))
{
}
}
var
errCodeDes
=
xe
.
GetElement
(
"err_code_des"
)
==
null
?
""
:
xe
.
GetElement
(
"err_code_des"
).
Value
;
var
returnMsg
=
xe
.
GetElement
(
"return_msg"
)
==
null
?
""
:
xe
.
GetElement
(
"return_msg"
).
Value
;
return
new
BaseResult
()
{
IsSuccess
=
false
,
Message
=
returnMsg
+
errCodeDes
};
#
endregion
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment