Skip to content

Commit

Permalink
Merge pull request JeffreySu#2426 from RockRockWhite/Developer-TenpayV3
Browse files Browse the repository at this point in the history
修改BasePayApis 此类型不再为静态类 使用ISenparcWeixinSettingForTenpayV3初始化实例
  • Loading branch information
JeffreySu committed Aug 22, 2021
2 parents 4951df4 + 5b6fc56 commit 735dd67
Show file tree
Hide file tree
Showing 7 changed files with 196 additions and 90 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
using Microsoft.AspNetCore.Mvc;
using Senparc.CO2NET.Extensions;
using Senparc.CO2NET.Utilities;
using Senparc.Weixin.Entities;
using Senparc.Weixin.Exceptions;
using Senparc.Weixin.Helpers;
using Senparc.Weixin.MP;
Expand Down Expand Up @@ -57,6 +58,19 @@ public static TenPayV3Info TenPayV3Info
}
}

/// <summary>
/// 用于初始化BasePayApis
/// </summary>
private readonly ISenparcWeixinSettingForTenpayV3 _tenpayV3Setting;

private readonly BasePayApis _basePayApis;

public TenPayRealV3Controller()
{
_tenpayV3Setting = Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
_basePayApis = new BasePayApis(_tenpayV3Setting);
}

/// <summary>
/// 获取用户的OpenId
/// </summary>
Expand Down Expand Up @@ -191,7 +205,7 @@ public async Task<IActionResult> JsApi(int productId, int hc)

//var result = TenPayOldV3.Unifiedorder(xmlDataInfo);//调用统一订单接口
//JsSdkUiPackage jsPackage = new JsSdkUiPackage(TenPayV3Info.AppId, timeStamp, nonceStr,);
var result = await BasePayApis.JsApiAsync(jsApiRequestData);
var result = await _basePayApis.JsApiAsync(jsApiRequestData);
var package = string.Format("prepay_id={0}", result.prepay_id);

ViewData["product"] = product;
Expand Down Expand Up @@ -356,7 +370,7 @@ public async Task<IActionResult> Refund()
//#region 新方法(Senparc.Weixin v6.4.4+)
//var result = TenPayOldV3.Refund(_serviceProvider, dataInfo);//证书地址、密码,在配置文件中设置,并在注册微信支付信息时自动记录
//#endregion
var result = await BasePayApis.RefundAsync(dataInfo);
var result = await _basePayApis.RefundAsync(dataInfo);

WeixinTrace.SendCustomLog("进入退款流程", "3 Result:" + result.ToJson());
ViewData["Message"] = $"退款结果:{result.status} {result.ResultCode}。您可以刷新当前页面查看最新结果。";
Expand Down Expand Up @@ -485,11 +499,11 @@ public async Task<IActionResult> OrderQuery(string out_trade_no = null, string t
//选择方式查询订单
if (out_trade_no is not null)
{
result = await BasePayApis.OrderQueryByOutTradeNoAsync(out_trade_no, TenPayV3Info.MchId);
result = await _basePayApis.OrderQueryByOutTradeNoAsync(out_trade_no, TenPayV3Info.MchId);
}
if (transaction_id is not null)
{
result = await BasePayApis.OrderQueryByTransactionIdAsync(transaction_id, TenPayV3Info.MchId);
result = await _basePayApis.OrderQueryByTransactionIdAsync(transaction_id, TenPayV3Info.MchId);
}

return Json(result);
Expand All @@ -509,7 +523,7 @@ public async Task<IActionResult> CloseOrder(string out_trade_no)
}

ReturnJsonBase result = null;
result = await BasePayApis.CloseOrderAsync(out_trade_no, TenPayV3Info.MchId);
result = await _basePayApis.CloseOrderAsync(out_trade_no, TenPayV3Info.MchId);

return Json(result);
}
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#region Apache License Version 2.0
/*----------------------------------------------------------------
Copyright 2021 Jeffrey Su & Suzhou Senparc Network Technology Co.,Ltd.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the License for the specific language governing permissions
and limitations under the License.
Detail: https://github.com/JeffreySu/WeiXinMPSDK/blob/master/license.md
----------------------------------------------------------------*/
#endregion Apache License Version 2.0

/*----------------------------------------------------------------
Copyright (C) 2021 Senparc
文件名:MarketingApis.cs
文件功能描述:微信支付V3营销工具接口
创建标识:Senparc - 20210821
----------------------------------------------------------------*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Senparc.Weixin.TenPayV3.Apis.Marketing
{
/// <summary>
/// 微信支付V3营销工具接口
/// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.shtml 下的【营销工具】所有接口
/// </summary>
class MarketingApis
{
#region 代金券接口

#endregion
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
## 【营销工具】接口对应文档
[https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.shtml](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.shtml) 下的【营销工具】所有接口
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@
创建标识:Senparc - 20210815
修改标识:Senparc - 20210822
修改描述:重构使用ISenparcWeixinSettingForTenpayV3初始化实例
----------------------------------------------------------------*/

Expand Down Expand Up @@ -92,13 +95,16 @@ public async Task<HttpResponseMessage> GetHttpResponseMessageAsync(string url, o
{
//var co2netHttpClient = CO2NET.HttpUtility.RequestUtility.HttpPost_Common_NetCore(serviceProvider, url, out var hc, contentType: "application/json");

//设置参数
var mchid = _tenpayV3Setting.TenPayV3_MchId;
var ser_no = _tenpayV3Setting.TenPayV3_SerialNumber;
var privateKey = _tenpayV3Setting.TenPayV3_PrivateKey;
////设置参数
//var mchid = _tenpayV3Setting.TenPayV3_MchId;
//var ser_no = _tenpayV3Setting.TenPayV3_SerialNumber;
//var privateKey = _tenpayV3Setting.TenPayV3_PrivateKey;

////使用微信支付参数,配置 HttpHandler
//TenPayHttpHandler httpHandler = new(mchid, ser_no, privateKey);

//使用微信支付参数,配置 HttpHandler
TenPayHttpHandler httpHandler = new(mchid, ser_no, privateKey);
//TODO:此处重构使用ISenparcWeixinSettingForTenpayV3
TenPayHttpHandler httpHandler = new(_tenpayV3Setting);

//创建 HttpClient
HttpClient client = new HttpClient(httpHandler);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,13 @@
创建标识:Senparc - 20210815
修改标识:Senparc - 20210822
修改描述:重构使用ISenparcWeixinSettingForTenpayV3初始化实例
----------------------------------------------------------------*/

using Senparc.Weixin.Entities;
using Senparc.Weixin.TenPayV3.Helpers;
using System;
using System.Collections.Generic;
Expand All @@ -48,17 +52,27 @@ namespace Senparc.Weixin.TenPayV3.HttpHandlers
/// </summary>
public class TenPayHttpHandler : DelegatingHandler
{
private readonly string merchantId;
private readonly string serialNo;
private readonly string privateKey;
//private readonly string merchantId;
//private readonly string serialNo;
//private readonly string privateKey;

//public TenPayHttpHandler(string merchantId, string merchantSerialNo, string privateKey)
//{
// InnerHandler = new HttpClientHandler();

// this.merchantId = merchantId;
// this.serialNo = merchantSerialNo;
// this.privateKey = privateKey;
//}

public TenPayHttpHandler(string merchantId, string merchantSerialNo, string privateKey)
//TODO: 此处重构使用ISenparcWeixinSettingForTenpayV3初始化实例
private ISenparcWeixinSettingForTenpayV3 _tenpayV3Setting;

public TenPayHttpHandler(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null)
{
InnerHandler = new HttpClientHandler();

this.merchantId = merchantId;
this.serialNo = merchantSerialNo;
this.privateKey = privateKey;
_tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
}

/// <summary>
Expand Down Expand Up @@ -98,10 +112,15 @@ protected async Task<string> BuildAuthAsync(HttpRequestMessage request)
string nonce = Path.GetRandomFileName();

string message = $"{method}\n{uri}\n{timestamp}\n{nonce}\n{body}\n";
//TODO:此处重构待测试
string signature = TenPaySignHelper.CreateSign(message, privateKey);
////此处重构待测试
//string signature = TenPaySignHelper.CreateSign(message, privateKey);

//return $"mchid=\"{merchantId}\",nonce_str=\"{nonce}\",timestamp=\"{timestamp}\",serial_no=\"{serialNo}\",signature=\"{signature}\"";

//TODO:此处重构使用ISenparcWeixinSettingForTenpayV3
string signature = TenPaySignHelper.CreateSign(message, _tenpayV3Setting.TenPayV3_PrivateKey);

return $"mchid=\"{merchantId}\",nonce_str=\"{nonce}\",timestamp=\"{timestamp}\",serial_no=\"{serialNo}\",signature=\"{signature}\"";
return $"mchid=\"{_tenpayV3Setting.TenPayV3_MchId}\",nonce_str=\"{nonce}\",timestamp=\"{timestamp}\",serial_no=\"{_tenpayV3Setting.TenPayV3_SerialNumber}\",signature=\"{signature}\"";
}
}
}
56 changes: 28 additions & 28 deletions src/Senparc.Weixin.TenPay/Senparc.Weixin.TenPayV3/TenPayV3Info.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,12 @@
Copyright (C) 2021 Senparc
文件名:TenPayV3Info.cs
文件功能描述:微信支付V3基础信息储存类
创建标识:Senparc - 20150211
修改标识:Senparc - 20150303
修改描述:整理接口
修改标识:Senparc - 20180707
修改描述:添加支持 SenparcWeixinSetting 参数的构造函数
修改标识:Senparc - 20180802
修改描述:v15.2.0 SenparcWeixinSetting 添加 TenPayV3_WxOpenTenpayNotify 属性,用于设置小程序支付回调地址
创建标识:Senparc - 20210804
修改标识:Senparc - 20190521
修改描述:v1.4.0 .NET Core 添加多证书注册功能
修改标识:Senparc - 20210822
修改描述:修改BasePayApis 此类型不再为静态类 使用ISenparcWeixinSettingForTenpayV3初始化实例
----------------------------------------------------------------*/

Expand All @@ -56,6 +46,13 @@ namespace Senparc.Weixin.TenPayV3
/// </summary>
public class TenPayV3Info
{
/// <summary>
/// 用于初始化BasePayApis
/// </summary>
private readonly ISenparcWeixinSettingForTenpayV3 _tenpayV3Setting;

private readonly BasePayApis _basePayApis;

private PublicKeyCollection publicKeys;

/// <summary>
Expand Down Expand Up @@ -152,21 +149,24 @@ public TenPayV3Info(string appId, string appSecret, string mchId, string key, st
/// <summary>
/// 微信支付 V3 参数 构造函数
/// </summary>
/// <param name="senparcWeixinSetting">已经填充过微信支付(旧版本)参数的 SenparcWeixinSetting 对象</param>
public TenPayV3Info(ISenparcWeixinSettingForTenpayV3 senparcWeixinSetting)
: this(senparcWeixinSetting.TenPayV3_AppId,
senparcWeixinSetting.TenPayV3_AppSecret,
senparcWeixinSetting.TenPayV3_MchId,
senparcWeixinSetting.TenPayV3_Key,
senparcWeixinSetting.TenPayV3_CertPath,
senparcWeixinSetting.TenPayV3_CertSecret,
senparcWeixinSetting.TenPayV3_SubAppId,
senparcWeixinSetting.TenPayV3_SubAppSecret,
senparcWeixinSetting.TenPayV3_SubMchId,
senparcWeixinSetting.TenPayV3_TenpayNotify,
senparcWeixinSetting.TenPayV3_WxOpenTenpayNotify
/// <param name="senparcWeixinSetting">已经填充过微信支付参数的 SenparcWeixinSetting 对象</param>
public TenPayV3Info(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null)
: this(senparcWeixinSettingForTenpayV3.TenPayV3_AppId,
senparcWeixinSettingForTenpayV3.TenPayV3_AppSecret,
senparcWeixinSettingForTenpayV3.TenPayV3_MchId,
senparcWeixinSettingForTenpayV3.TenPayV3_Key,
senparcWeixinSettingForTenpayV3.TenPayV3_CertPath,
senparcWeixinSettingForTenpayV3.TenPayV3_CertSecret,
senparcWeixinSettingForTenpayV3.TenPayV3_SubAppId,
senparcWeixinSettingForTenpayV3.TenPayV3_SubAppSecret,
senparcWeixinSettingForTenpayV3.TenPayV3_SubMchId,
senparcWeixinSettingForTenpayV3.TenPayV3_TenpayNotify,
senparcWeixinSettingForTenpayV3.TenPayV3_WxOpenTenpayNotify
)
{
_tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
_basePayApis = new BasePayApis(_tenpayV3Setting);

}

/// <summary>
Expand All @@ -179,7 +179,7 @@ public async Task<PublicKeyCollection> GetPublicKeysAsync()
if (publicKeys == null)
{
//获取最新的 Key
publicKeys = await BasePayApis.GetPublicKeysAsync();
publicKeys = await _basePayApis.GetPublicKeysAsync();
}
return publicKeys;
}
Expand Down

0 comments on commit 735dd67

Please sign in to comment.