外贸网站基于第三方的信用卡付款通道wedopay的付款插件 源码共享。如有问题多多交流:我的电子邮件cnchjf#qq.com(#换@)
希望志同道合的到我们的大群里.net 技术交流群4 1 0 5 0 4 8 0 加群 请注明:nopcommerce
/Files/chjf2008/Nop.Plugin.Payments.Wedopay.rar
其中 需要配置的信息 本人都放在语言资源包中了,这样方便在后台中修改,以不至于去修改web.config文件,所以在view 文件夹下的
Configure.cshtml 是多余的。
主要实现的代码:
WedopayPaymentProcessor.cs
此类要实现
BasePlugin, IPaymentMethod 中的方法,具体的可以见类库大打包文件。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Configuration;
using System.Web.Routing;
using System.Xml;
using System.Xml.Serialization;
using Nop.Core;
using Nop.Core.Domain.Customers;
using Nop.Core.Domain.Directory;
using Nop.Core.Domain.Orders;
using Nop.Core.Domain.Payments;
using Nop.Core.Domain.Shipping;
using Nop.Core.Plugins;
using Nop.Plugin.Payments.Wedopay.Controllers;
using Nop.Services.Catalog;
using Nop.Services.Common;
using Nop.Services.Configuration;
using Nop.Services.Customers;
using Nop.Services.Directory;
using Nop.Services.Localization;
using Nop.Services.Logging;
using Nop.Services.Orders;
using Nop.Services.Payments;
using Nop.Services.Shipping;
using Nop.Services.Tax;
using Nop.Plugin.Payments.Wedopay.Models;
using System.Net;
using System.Collections.Specialized;
namespace Nop.Plugin.Payments.Wedopay
{
public class WedopayPaymentProcessor : BasePlugin, IPaymentMethod
{
#region Fields
private readonly IShippingService _shippingService;
private readonly IWorkContext _workContext;
private readonly ICustomerService _customerService;
private readonly IOrderProcessingService _orderProcessingService;
private readonly IOrderService _orderService;
private readonly ILocalizationService _localocalizationService;
#endregion
#region Ctor
public WedopayPaymentProcessor(IShippingService shippingService, IWorkContext workContext,
ICustomerService customerService,
IOrderProcessingService orderProcessingService,
IOrderService orderService, ILocalizationService localizationService,
ILocalizationService _localocalizationService)
{
this._shippingService = shippingService;
this._workContext = workContext;
this._customerService = customerService;
this._orderProcessingService = orderProcessingService;
this._orderService = orderService;
this._localocalizationService = localizationService;
}
#endregion
public ProcessPaymentResult ProcessPayment(ProcessPaymentRequest processPaymentRequest)
{
var result = new ProcessPaymentResult();
result.NewPaymentStatus = PaymentStatus.Pending;
//result.AuthorizationTransactionId = processPaymentRequest.GoogleOrderNumber;
return result;
}
public void PostProcessPayment(PostProcessPaymentRequest postProcessPaymentRequest)
{
var ShippingAddress = postProcessPaymentRequest.Order.ShippingAddress;
var order = postProcessPaymentRequest.Order;
var BillNo = order.OrderGuid.ToString();
var Amount = order.OrderTotal.ToString();
var Language = 2;
var Currency = 1;
var PaymentType = 5;
//get payment config from language resource system
var MD5key = _localocalizationService.GetResource("Config.Payment.Wedopay.Md5Key").Trim();
var MerNo = _localocalizationService.GetResource("Config.Payment.Wedopay.MerNo").Trim();
var ReturnURL = _localocalizationService.GetResource("Config.Payment.Wedopay.ReturnURL").Trim();
var SubmitURL = _localocalizationService.GetResource("Config.Payment.Wedopay.SubmitURL").Trim();
///end
var md5src = MerNo + BillNo + Currency + Amount + Language + ReturnURL + MD5key;
var MD5info = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(md5src, "MD5");
List<string> productNameList = new List<string>();
foreach (var pv in order.OrderProductVariants)
{
productNameList.Add(pv.ProductVariant.Product.Name);
}
System.Text.StringBuilder formBuild = new StringBuilder();
formBuild.Append("<html><head>");
formBuild.Append("<script> function submit(){document.getElementById('frmWedopay').submit();}</script>");
formBuild.Append("</head><body>");
formBuild.Append("<form id=\"frmWedopay\" name=\"pay\" action=\""+SubmitURL+"\" method=\"post\">");
formBuild.Append("<input type=\"hidden\" value=\"" + Currency + "\" name=\"Currency\" id=\"Currency\">");
formBuild.Append("<input type=\"hidden\" value=\"\" name=\"OrderDesc\" id=\"OrderDesc\">");
formBuild.Append("<input type=\"hidden\" value=\"\" name=\"Remark\" id=\"Remark\">");
formBuild.Append("<input type=\"hidden\" value=\"\" name=\"OrderURL\" id=\"OrderURL\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ReturnURL + "\" name=\"ReturnURL\" id=\"ReturnURL\">");
formBuild.Append("<input type=\"hidden\" value=\"" + Language + "\" name=\"Language\" id=\"Language\">");
formBuild.Append("<input type=\"hidden\" value=\"" + order.OrderGuid.ToString() + "\" name=\"BillNo\" id=\"BillNo\">");
formBuild.Append("<input type=\"hidden\" value=\"" + MerNo + "\" name=\"MerNo\" id=\"MerNo\">");
formBuild.Append("<input type=\"hidden\" value=\"" + MD5info + "\" name=\"MD5info\" id=\"MD5info\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.FirstName + "\" name=\"shippingFirstName\" id=\"shippingFirstName\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.LastName + "\" name=\"shippingLastName\" id=\"shippingLastName\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.Email + "\" name=\"shippingEmail\" id=\"shippingEmail\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.PhoneNumber + "\" name=\"shippingPhone\" id=\"shippingPhone\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.ZipPostalCode + "\" name=\"shippingZipcode\" id=\"shippingZipcode\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.Address1 +"\" name=\"shippingAddress\" id=\"shippingAddress\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.City + "\" name=\"shippingCity\" id=\"shippingCity\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.StateProvince.Name + "\" name=\"shippingSstate\" id=\"shippingSstate\">");
formBuild.Append("<input type=\"hidden\" value=\"" + string.Join(",", productNameList.ToArray()) + "\" name=\"products\" id=\"products\">");
formBuild.Append("<input type=\"hidden\" value=\"\" name=\"MerWebsite\" id=\"MerWebsite\">");
formBuild.Append("<input type=\"hidden\" value=\"" + order.OrderTotal.ToString() + "\" name=\"Amount\" id=\"Amount\">");
formBuild.Append("<input type=\"hidden\" value=\"" + PaymentType + "\" name=\"paymenttype\" id=\"paymenttype\">");
formBuild.Append("</form>");
formBuild.Append("<script language='javascript'>submit();</script>");
formBuild.Append("</body></html>");
string outputString = formBuild.ToString();
HttpContext.Current.Response.Write(outputString);
HttpContext.Current.Response.End();
}
public decimal GetAdditionalHandlingFee()
{
return decimal.Zero;
}
public CapturePaymentResult Capture(CapturePaymentRequest capturePaymentRequest)
{
var result = new CapturePaymentResult();
return result;
}
public RefundPaymentResult Refund(RefundPaymentRequest refundPaymentRequest)
{
var result = new RefundPaymentResult();
result.AddError("Refund method not supported");
return result;
}
public VoidPaymentResult Void(VoidPaymentRequest voidPaymentRequest)
{
var result = new VoidPaymentResult();
result.AddError("Void method not supported");
return result;
}
public ProcessPaymentResult ProcessRecurringPayment(ProcessPaymentRequest processPaymentRequest)
{
var result = new ProcessPaymentResult();
result.AddError("Recurring payment not supported");
return result;
}
public CancelRecurringPaymentResult CancelRecurringPayment(CancelRecurringPaymentRequest cancelPaymentRequest)
{
var result = new CancelRecurringPaymentResult();
result.AddError("Recurring payment not supported");
return result;
}
public void GetConfigurationRoute(out string actionName, out string controllerName, out RouteValueDictionary routeValues)
{
actionName = "Configure";
controllerName = "PaymentWedopay";
routeValues = new RouteValueDictionary() { { "Namespaces", "Nop.Plugin.Payments.Wedopay.Controllers" }, { "area", null } };
}
/// <summary>
/// Gets a route for payment info
/// </summary>
/// <param name="actionName">Action name</param>
/// <param name="controllerName">Controller name</param>
/// <param name="routeValues">Route values</param>
public void GetPaymentInfoRoute(out string actionName, out string controllerName, out RouteValueDictionary routeValues)
{
actionName = "PaymentInfo";
controllerName = "PaymentWedopay";
routeValues = new RouteValueDictionary() { { "Namespaces", "Nop.Plugin.Payments.Wedopay.Controllers" }, { "area", null } };
}
public Type GetControllerType()
{
return typeof(PaymentWedopayController);
}
#region Properies
/// <summary>
/// Gets a value indicating whether capture is supported
/// </summary>
public bool SupportCapture
{
get
{
return true;
}
}
/// <summary>
/// Gets a value indicating whether partial refund is supported
/// </summary>
public bool SupportPartiallyRefund
{
get
{
return false;
}
}
/// <summary>
/// Gets a value indicating whether refund is supported
/// </summary>
public bool SupportRefund
{
get
{
return true;
}
}
/// <summary>
/// Gets a value indicating whether void is supported
/// </summary>
public bool SupportVoid
{
get
{
return true;
}
}
/// <summary>
/// Gets a recurring payment type of payment method
/// </summary>
public RecurringPaymentType RecurringPaymentType
{
get
{
return RecurringPaymentType.Automatic;
}
}
/// <summary>
/// Gets a payment method type
/// </summary>
public PaymentMethodType PaymentMethodType
{
get
{
return PaymentMethodType.Standard;
}
}
#endregion
}
}
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Configuration;
using System.Web.Routing;
using System.Xml;
using System.Xml.Serialization;
using Nop.Core;
using Nop.Core.Domain.Customers;
using Nop.Core.Domain.Directory;
using Nop.Core.Domain.Orders;
using Nop.Core.Domain.Payments;
using Nop.Core.Domain.Shipping;
using Nop.Core.Plugins;
using Nop.Plugin.Payments.Wedopay.Controllers;
using Nop.Services.Catalog;
using Nop.Services.Common;
using Nop.Services.Configuration;
using Nop.Services.Customers;
using Nop.Services.Directory;
using Nop.Services.Localization;
using Nop.Services.Logging;
using Nop.Services.Orders;
using Nop.Services.Payments;
using Nop.Services.Shipping;
using Nop.Services.Tax;
using Nop.Plugin.Payments.Wedopay.Models;
using System.Net;
using System.Collections.Specialized;
namespace Nop.Plugin.Payments.Wedopay
{
public class WedopayPaymentProcessor : BasePlugin, IPaymentMethod
{
#region Fields
private readonly IShippingService _shippingService;
private readonly IWorkContext _workContext;
private readonly ICustomerService _customerService;
private readonly IOrderProcessingService _orderProcessingService;
private readonly IOrderService _orderService;
private readonly ILocalizationService _localocalizationService;
#endregion
#region Ctor
public WedopayPaymentProcessor(IShippingService shippingService, IWorkContext workContext,
ICustomerService customerService,
IOrderProcessingService orderProcessingService,
IOrderService orderService, ILocalizationService localizationService,
ILocalizationService _localocalizationService)
{
this._shippingService = shippingService;
this._workContext = workContext;
this._customerService = customerService;
this._orderProcessingService = orderProcessingService;
this._orderService = orderService;
this._localocalizationService = localizationService;
}
#endregion
public ProcessPaymentResult ProcessPayment(ProcessPaymentRequest processPaymentRequest)
{
var result = new ProcessPaymentResult();
result.NewPaymentStatus = PaymentStatus.Pending;
//result.AuthorizationTransactionId = processPaymentRequest.GoogleOrderNumber;
return result;
}
public void PostProcessPayment(PostProcessPaymentRequest postProcessPaymentRequest)
{
var ShippingAddress = postProcessPaymentRequest.Order.ShippingAddress;
var order = postProcessPaymentRequest.Order;
var BillNo = order.OrderGuid.ToString();
var Amount = order.OrderTotal.ToString();
var Language = 2;
var Currency = 1;
var PaymentType = 5;
//get payment config from language resource system
var MD5key = _localocalizationService.GetResource("Config.Payment.Wedopay.Md5Key").Trim();
var MerNo = _localocalizationService.GetResource("Config.Payment.Wedopay.MerNo").Trim();
var ReturnURL = _localocalizationService.GetResource("Config.Payment.Wedopay.ReturnURL").Trim();
var SubmitURL = _localocalizationService.GetResource("Config.Payment.Wedopay.SubmitURL").Trim();
///end
var md5src = MerNo + BillNo + Currency + Amount + Language + ReturnURL + MD5key;
var MD5info = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(md5src, "MD5");
List<string> productNameList = new List<string>();
foreach (var pv in order.OrderProductVariants)
{
productNameList.Add(pv.ProductVariant.Product.Name);
}
System.Text.StringBuilder formBuild = new StringBuilder();
formBuild.Append("<html><head>");
formBuild.Append("<script> function submit(){document.getElementById('frmWedopay').submit();}</script>");
formBuild.Append("</head><body>");
formBuild.Append("<form id=\"frmWedopay\" name=\"pay\" action=\""+SubmitURL+"\" method=\"post\">");
formBuild.Append("<input type=\"hidden\" value=\"" + Currency + "\" name=\"Currency\" id=\"Currency\">");
formBuild.Append("<input type=\"hidden\" value=\"\" name=\"OrderDesc\" id=\"OrderDesc\">");
formBuild.Append("<input type=\"hidden\" value=\"\" name=\"Remark\" id=\"Remark\">");
formBuild.Append("<input type=\"hidden\" value=\"\" name=\"OrderURL\" id=\"OrderURL\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ReturnURL + "\" name=\"ReturnURL\" id=\"ReturnURL\">");
formBuild.Append("<input type=\"hidden\" value=\"" + Language + "\" name=\"Language\" id=\"Language\">");
formBuild.Append("<input type=\"hidden\" value=\"" + order.OrderGuid.ToString() + "\" name=\"BillNo\" id=\"BillNo\">");
formBuild.Append("<input type=\"hidden\" value=\"" + MerNo + "\" name=\"MerNo\" id=\"MerNo\">");
formBuild.Append("<input type=\"hidden\" value=\"" + MD5info + "\" name=\"MD5info\" id=\"MD5info\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.FirstName + "\" name=\"shippingFirstName\" id=\"shippingFirstName\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.LastName + "\" name=\"shippingLastName\" id=\"shippingLastName\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.Email + "\" name=\"shippingEmail\" id=\"shippingEmail\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.PhoneNumber + "\" name=\"shippingPhone\" id=\"shippingPhone\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.ZipPostalCode + "\" name=\"shippingZipcode\" id=\"shippingZipcode\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.Address1 +"\" name=\"shippingAddress\" id=\"shippingAddress\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.City + "\" name=\"shippingCity\" id=\"shippingCity\">");
formBuild.Append("<input type=\"hidden\" value=\"" + ShippingAddress.StateProvince.Name + "\" name=\"shippingSstate\" id=\"shippingSstate\">");
formBuild.Append("<input type=\"hidden\" value=\"" + string.Join(",", productNameList.ToArray()) + "\" name=\"products\" id=\"products\">");
formBuild.Append("<input type=\"hidden\" value=\"\" name=\"MerWebsite\" id=\"MerWebsite\">");
formBuild.Append("<input type=\"hidden\" value=\"" + order.OrderTotal.ToString() + "\" name=\"Amount\" id=\"Amount\">");
formBuild.Append("<input type=\"hidden\" value=\"" + PaymentType + "\" name=\"paymenttype\" id=\"paymenttype\">");
formBuild.Append("</form>");
formBuild.Append("<script language='javascript'>submit();</script>");
formBuild.Append("</body></html>");
string outputString = formBuild.ToString();
HttpContext.Current.Response.Write(outputString);
HttpContext.Current.Response.End();
}
public decimal GetAdditionalHandlingFee()
{
return decimal.Zero;
}
public CapturePaymentResult Capture(CapturePaymentRequest capturePaymentRequest)
{
var result = new CapturePaymentResult();
return result;
}
public RefundPaymentResult Refund(RefundPaymentRequest refundPaymentRequest)
{
var result = new RefundPaymentResult();
result.AddError("Refund method not supported");
return result;
}
public VoidPaymentResult Void(VoidPaymentRequest voidPaymentRequest)
{
var result = new VoidPaymentResult();
result.AddError("Void method not supported");
return result;
}
public ProcessPaymentResult ProcessRecurringPayment(ProcessPaymentRequest processPaymentRequest)
{
var result = new ProcessPaymentResult();
result.AddError("Recurring payment not supported");
return result;
}
public CancelRecurringPaymentResult CancelRecurringPayment(CancelRecurringPaymentRequest cancelPaymentRequest)
{
var result = new CancelRecurringPaymentResult();
result.AddError("Recurring payment not supported");
return result;
}
public void GetConfigurationRoute(out string actionName, out string controllerName, out RouteValueDictionary routeValues)
{
actionName = "Configure";
controllerName = "PaymentWedopay";
routeValues = new RouteValueDictionary() { { "Namespaces", "Nop.Plugin.Payments.Wedopay.Controllers" }, { "area", null } };
}
/// <summary>
/// Gets a route for payment info
/// </summary>
/// <param name="actionName">Action name</param>
/// <param name="controllerName">Controller name</param>
/// <param name="routeValues">Route values</param>
public void GetPaymentInfoRoute(out string actionName, out string controllerName, out RouteValueDictionary routeValues)
{
actionName = "PaymentInfo";
controllerName = "PaymentWedopay";
routeValues = new RouteValueDictionary() { { "Namespaces", "Nop.Plugin.Payments.Wedopay.Controllers" }, { "area", null } };
}
public Type GetControllerType()
{
return typeof(PaymentWedopayController);
}
#region Properies
/// <summary>
/// Gets a value indicating whether capture is supported
/// </summary>
public bool SupportCapture
{
get
{
return true;
}
}
/// <summary>
/// Gets a value indicating whether partial refund is supported
/// </summary>
public bool SupportPartiallyRefund
{
get
{
return false;
}
}
/// <summary>
/// Gets a value indicating whether refund is supported
/// </summary>
public bool SupportRefund
{
get
{
return true;
}
}
/// <summary>
/// Gets a value indicating whether void is supported
/// </summary>
public bool SupportVoid
{
get
{
return true;
}
}
/// <summary>
/// Gets a recurring payment type of payment method
/// </summary>
public RecurringPaymentType RecurringPaymentType
{
get
{
return RecurringPaymentType.Automatic;
}
}
/// <summary>
/// Gets a payment method type
/// </summary>
public PaymentMethodType PaymentMethodType
{
get
{
return PaymentMethodType.Standard;
}
}
#endregion
}
}
分类:
C#
标签:
nopCommerce2.0
, wedopay
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?