一.回顾
支付宝插件源码下载地址:点击下载
上篇介绍了使用支付宝插件进行支付,全额退款,部分退款还有插件的多店铺配置,本文介绍下如何实现的。
二.前期准备
插件主要有3个功能:
- 多店铺插件配置
- 支付功能
- 退款功能
数据库支持:
- 新增dbl_PaymentInfo表保存支付记录。
- 新增dbl_RefundInfo表保存退款记录。
其他准备:
- 支付宝即时到账PID和MD5秘钥Key,可通过支付宝开放平台获取。
三.流程规划
- 插件安装卸载流程
2. 支付流程
3. 退款流程
四.创建项目
1. 新建类库项目,名称为 DaBoLang.Nop.Plugin.Payments.AliPay,位置放在Plugins下
2. 点击项目快捷键Alt+Enter进入项目属性,
设置输出路径为..\..\Presentation\Nop.Web\Plugins\DaBoLang.Payments.AliPay\
3. 安装相关包:项目根目录新建packages.config文件,内容如下
1 <?xml version="1.0" encoding="utf-8"?> 2 <packages> 3 <package /> 4 <package /> 5 <package /> 6 <package /> 7 <package /> 8 </packages>
打开【工具】【NuGet 包管理器】【程序包管理器控制台】,
输入下边命令更新包: Update-Package -ProjectName 'DaBoLang.Nop.Plugin.Payments.AliPay' -Reinstall
最后添加 Nop.Core Nop.Data Nop.Services Nop.Web.FrameWork 项目引用
4. 创建插件描述文件:根目录新建Description.txt文件 用于插件描述,写入内容如下:
1 Group: Payment methods 2 FriendlyName: 支付宝 3 SystemName: DaBoLang.Payments.AliPay 4 Version: 1.00 5 SupportedVersions: 3.90 6 Author: 大波浪 7 DisplayOrder: 1 8 FileName: DaBoLang.Nop.Plugin.Payments.AliPay.dll 9 Description: 支付宝 即时到账 插件,支持支付,退款
5. 创建项目目录,如果你已经下载了插件项目参考项目目录如下:
- Alipay 支付宝即时到账相关
- Controllers 控制器文件夹
- Data 数据库相关
- Domain 实体类
- Models 模型
- Services 服务接口
- Views 视图
- AliPayPaymentProcessor.cs 支付插件实现类
- AliPayPaymentSettings.cs 支付宝即时到账配置类
- DependencyRegistrar.cs 依赖注入扩展类
- Description.txt 插件描述文件
- RouteProvider.cs 路由注册类
五.创建数据库
项目我们已经创建好了。记下来我们创建付款记录表和退款记录表用于保存相关记录。nop使用的是ORM框架为Entity Framework框架,我们使用Code First模式来创建。
1. 在Domain文件夹创建PaymentInfo类用于保存付款信息,RefundInfo类用于保存退款信息。
nop中的实体类需要继承 Nop.Core.BaseEntity 抽象方法。
1 using Nop.Core; 2 using Nop.Core.Domain.Customers; 3 using Nop.Core.Domain.Orders; 4 using System; 5 using System.Collections.Generic; 6 using System.Diagnostics; 7 using System.Globalization; 8 using System.Linq; 9 10 namespace DaBoLang.Nop.Plugin.Payments.AliPay.Domain 11 { 12 /// <summary> 13 /// 命名空间:DaBoLang.Nop.Plugin.Payments.AliPay.Domain 14 /// 名 称:PaymentInfo 15 /// 功 能:实体类 16 /// 详 细:付款记录 17 /// 版 本:1.0.0.0 18 /// 作 者:大波浪 19 /// 联系方式:http://www.cnblogs.com/yaoshangjin 20 /// 说 明: 21 /// </summary> 22 public partial class PaymentInfo : BaseEntity 23 { 24 #region Properties 25 public Guid PaymentGuid { get; set; } 26 /// <summary> 27 /// 订单编号 28 /// </summary> 29 public int OrderId { get; set; } 30 /// <summary> 31 /// 插件SystemName 32 /// </summary> 33 public string Name { get; set; } 34 /// <summary> 35 /// 交易金额 36 /// </summary> 37 public decimal Total { get; set; } 38 /// <summary> 39 /// 订单编号外部交易号 40 /// </summary> 41 public string Out_Trade_No { get; set; } 42 /// <summary> 43 /// 说明 44 /// </summary> 45 public string Note { get; set; } 46 /// <summary> 47 /// 交易号,内部交易号,支付宝交易号或者微信交易号 48 /// </summary> 49 public string Trade_no { get; set; } 50 /// <summary> 51 /// 第三方交易状态 52 /// </summary> 53 public string Trade_status { get; set; } 54 /// <summary> 55 /// 收款单位email 56 /// </summary> 57 public string Seller_email { get; set; } 58 /// <summary> 59 /// 收款单位id 60 /// </summary> 61 public string Seller_id { get; set; } 62 /// <summary> 63 /// 付款账户id 64 /// </summary> 65 public string Buyer_id { get; set; } 66 /// <summary> 67 /// 付款账户email 68 /// </summary> 69 public string Buyer_email { get; set; } 70 /// <summary> 71 /// 内部订单创建时间 72 /// </summary> 73 public DateTime CreateDateUtc { get; set; } 74 75 #endregion 76 } 77 } 78