Merge branch 'dev/dev1.0' into feature/rzy/api_1.0
This commit is contained in:
		
						commit
						753b466605
					
				| 
						 | 
				
			
			@ -21,6 +21,9 @@ const (
 | 
			
		|||
 | 
			
		||||
	//未登录
 | 
			
		||||
	NotLogin = 1000
 | 
			
		||||
 | 
			
		||||
	// 商户
 | 
			
		||||
	MerchantNotFound = 1100
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var MsgEN = map[int]string{
 | 
			
		||||
| 
						 | 
				
			
			@ -38,6 +41,8 @@ var MsgZH = map[int]string{
 | 
			
		|||
	NotFound:   "数据不存在",
 | 
			
		||||
	NotAuth:    "未经授权",
 | 
			
		||||
	NotLogin:   "未登录",
 | 
			
		||||
 | 
			
		||||
	MerchantNotFound: "商户不存在",
 | 
			
		||||
}
 | 
			
		||||
var MsgMap map[string]map[int]string = map[string]map[int]string{"en": MsgZH}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,3 +37,7 @@ func (m *MerchantRepo) MerchantDelete(merchant *merchantmodel.Merchant, conn bui
 | 
			
		|||
func (m *MerchantRepo) MerchantUpdate(merchant *merchantmodel.Merchant, conn builder.Cond, columns ...string) (int64, error) {
 | 
			
		||||
	return m.repo.Where(conn).MustCols(columns...).Update(merchant)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *MerchantRepo) MerchantDetail(merchant *merchantmodel.Merchant, conn builder.Cond) (bool, error) {
 | 
			
		||||
	return m.repo.Where(conn).Get(merchant)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ func (m *PayChannelRepo) PayChannelDelete(merchant *paychannelmodel.PayChannel,
 | 
			
		|||
	return m.repo.Where(conn).Delete(merchant)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// columns 参数为要更新的字段
 | 
			
		||||
// columns 参数为要更新的字段,即使为空
 | 
			
		||||
func (m *PayChannelRepo) PayChannelUpdate(merchant *paychannelmodel.PayChannel, conn builder.Cond, columns ...string) (int64, error) {
 | 
			
		||||
	return m.repo.Where(conn).MustCols(columns...).Update(merchant)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
package backend
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"PaymentCenter/app/constants/errorcode"
 | 
			
		||||
	"PaymentCenter/app/http/controllers"
 | 
			
		||||
	"PaymentCenter/app/http/entities"
 | 
			
		||||
	"PaymentCenter/app/http/entities/backend"
 | 
			
		||||
	"PaymentCenter/app/models/appmodel"
 | 
			
		||||
	"PaymentCenter/app/services"
 | 
			
		||||
	"PaymentCenter/app/utils/sm2"
 | 
			
		||||
	"github.com/ahmetb/go-linq/v3"
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func AppList(c *gin.Context) {
 | 
			
		||||
	req, _ := controllers.GetRequest(c).(*backend.AppListRequest)
 | 
			
		||||
	req.SetDefault()
 | 
			
		||||
	payChannelList, total, code := services.AppList(*req)
 | 
			
		||||
 | 
			
		||||
	result := make([]backend.AppResponse, 0, len(payChannelList))
 | 
			
		||||
	linq.From(payChannelList).SelectT(func(in appmodel.App) (out backend.AppResponse) {
 | 
			
		||||
		out.ResponseFromDb(in)
 | 
			
		||||
		return
 | 
			
		||||
	}).ToSlice(&result)
 | 
			
		||||
	data := entities.PageRsp{
 | 
			
		||||
		Total: total,
 | 
			
		||||
		Data:  result,
 | 
			
		||||
	}
 | 
			
		||||
	controllers.HandCodeRes(c, data, code)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func AppCreate(c *gin.Context) {
 | 
			
		||||
	req, _ := controllers.GetRequest(c).(*backend.AppCreateRequest)
 | 
			
		||||
	payChannel := req.RequestToDb()
 | 
			
		||||
	code := services.AppCreate(&payChannel)
 | 
			
		||||
 | 
			
		||||
	data := backend.AppResponse{}
 | 
			
		||||
	data.ResponseFromDb(payChannel)
 | 
			
		||||
	controllers.HandCodeRes(c, data, code)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func AppUpdate(c *gin.Context) {
 | 
			
		||||
	req, _ := controllers.GetRequest(c).(*backend.AppUpdateRequest)
 | 
			
		||||
	payChannel := req.RequestToDb()
 | 
			
		||||
	code := services.AppUpdate(&payChannel)
 | 
			
		||||
 | 
			
		||||
	data := backend.AppResponse{}
 | 
			
		||||
	data.ResponseFromDb(payChannel)
 | 
			
		||||
	controllers.HandCodeRes(c, data, code)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func AppDelete(c *gin.Context) {
 | 
			
		||||
	req, _ := controllers.GetRequest(c).(*entities.IdRequest)
 | 
			
		||||
	code := services.AppDelete(*req)
 | 
			
		||||
	controllers.HandCodeRes(c, nil, code)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GenerateDecrypt(c *gin.Context) {
 | 
			
		||||
	req, _ := controllers.GetRequest(c).(*backend.GenerateDecryptKeyRequest)
 | 
			
		||||
	var publicKey, privateKey string
 | 
			
		||||
	var err error
 | 
			
		||||
	switch req.KeyType {
 | 
			
		||||
	default:
 | 
			
		||||
		publicKey, privateKey, err = sm2.GenerateSM2Key()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			controllers.Error(c, errorcode.SystemError, err.Error())
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	controllers.HandCodeRes(c, map[string]string{
 | 
			
		||||
		"publicKey":  publicKey,
 | 
			
		||||
		"privateKey": privateKey,
 | 
			
		||||
	}, errorcode.Success)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,63 @@
 | 
			
		|||
package backend
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"PaymentCenter/app/constants/errorcode"
 | 
			
		||||
	"PaymentCenter/app/http/controllers"
 | 
			
		||||
	"PaymentCenter/app/http/entities"
 | 
			
		||||
	"PaymentCenter/app/http/entities/backend"
 | 
			
		||||
	"PaymentCenter/app/models/paychannelmodel"
 | 
			
		||||
	"PaymentCenter/app/services"
 | 
			
		||||
	"github.com/ahmetb/go-linq/v3"
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func PayChannelList(c *gin.Context) {
 | 
			
		||||
	req, _ := controllers.GetRequest(c).(*backend.PayChannelListRequest)
 | 
			
		||||
	req.SetDefault()
 | 
			
		||||
	payChannelList, total, code := services.PayChannelList(*req)
 | 
			
		||||
 | 
			
		||||
	result := make([]backend.PayChannelResponse, 0, len(payChannelList))
 | 
			
		||||
	linq.From(payChannelList).SelectT(func(in paychannelmodel.PayChannel) (out backend.PayChannelResponse) {
 | 
			
		||||
		out.ResponseFromDb(in)
 | 
			
		||||
		return
 | 
			
		||||
	}).ToSlice(&result)
 | 
			
		||||
	data := entities.PageRsp{
 | 
			
		||||
		Total: total,
 | 
			
		||||
		Data:  result,
 | 
			
		||||
	}
 | 
			
		||||
	controllers.HandCodeRes(c, data, code)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PayChannelCreate(c *gin.Context) {
 | 
			
		||||
	req, _ := controllers.GetRequest(c).(*backend.PayChannelCreateRequest)
 | 
			
		||||
	payChannel, err := req.RequestToDb()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		controllers.Error(c, errorcode.ParamError, err.Error())
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	code := services.PayChannelCreate(&payChannel)
 | 
			
		||||
 | 
			
		||||
	data := backend.PayChannelResponse{}
 | 
			
		||||
	data.ResponseFromDb(payChannel)
 | 
			
		||||
	controllers.HandCodeRes(c, data, code)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PayChannelUpdate(c *gin.Context) {
 | 
			
		||||
	req, _ := controllers.GetRequest(c).(*backend.PayChannelUpdateRequest)
 | 
			
		||||
	payChannel, err := req.RequestToDb()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		controllers.Error(c, errorcode.ParamError, err.Error())
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	code := services.PayChannelUpdate(&payChannel)
 | 
			
		||||
 | 
			
		||||
	data := backend.PayChannelResponse{}
 | 
			
		||||
	data.ResponseFromDb(payChannel)
 | 
			
		||||
	controllers.HandCodeRes(c, data, code)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PayChannelDelete(c *gin.Context) {
 | 
			
		||||
	req, _ := controllers.GetRequest(c).(*entities.IdRequest)
 | 
			
		||||
	code := services.PayChannelDelete(*req)
 | 
			
		||||
	controllers.HandCodeRes(c, nil, code)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,12 +0,0 @@
 | 
			
		|||
package domains
 | 
			
		||||
 | 
			
		||||
type Filter struct {
 | 
			
		||||
	Page     int `json:"page"`
 | 
			
		||||
	PageSize int `json:"page_size"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ProductFilter struct {
 | 
			
		||||
	Page        int    `json:"page" form:"page"`
 | 
			
		||||
	PageSize    int    `json:"page_size" form:"page_size"`
 | 
			
		||||
	ProductName string `json:"product_name" form:"product_name"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,23 +0,0 @@
 | 
			
		|||
package domains
 | 
			
		||||
 | 
			
		||||
import "time"
 | 
			
		||||
 | 
			
		||||
type Product struct {
 | 
			
		||||
	Id                  int
 | 
			
		||||
	ProductName         string
 | 
			
		||||
	ProductType         int
 | 
			
		||||
	PacketRule          int
 | 
			
		||||
	ProductKind         int
 | 
			
		||||
	Amount              string
 | 
			
		||||
	CouponType          int
 | 
			
		||||
	IsSuperposition     int
 | 
			
		||||
	TemplateId          int
 | 
			
		||||
	Status              int
 | 
			
		||||
	IsNeedBill          int
 | 
			
		||||
	CreateTime          time.Time
 | 
			
		||||
	SupplierProductId   int64
 | 
			
		||||
	SupplierProductName string
 | 
			
		||||
 | 
			
		||||
	Creator    string
 | 
			
		||||
	UpdateTime time.Time
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,101 @@
 | 
			
		|||
package backend
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"PaymentCenter/app/http/entities"
 | 
			
		||||
	"PaymentCenter/app/models/appmodel"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type AppListRequest struct {
 | 
			
		||||
	MerchantId int64 `json:"merchant_id"`
 | 
			
		||||
	entities.PageRequest
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type AppResponse struct {
 | 
			
		||||
	Id                int64  `json:"id"`
 | 
			
		||||
	MerchantId        int64  `json:"merchant_id"`
 | 
			
		||||
	AppName           string `json:"app_name"`
 | 
			
		||||
	AppRemark         string `json:"app_remark"`
 | 
			
		||||
	Status            int    `json:"status"`
 | 
			
		||||
	KeyType           int    `json:"key_type"`
 | 
			
		||||
	PublicKey         string `json:"public_key"`
 | 
			
		||||
	PrivateKey        string `json:"private_key"`
 | 
			
		||||
	MerchantPublicKey string `json:"merchant_public_key"`
 | 
			
		||||
	CreateTime        string `json:"create_time"`
 | 
			
		||||
	WhiteIp           string `json:"white_ip"`
 | 
			
		||||
	NotifyUrl         string `json:"notify_url"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (a *AppResponse) ResponseFromDb(db appmodel.App) {
 | 
			
		||||
	a.Id = db.Id
 | 
			
		||||
	a.MerchantId = db.MerchantId
 | 
			
		||||
	a.AppName = db.AppName
 | 
			
		||||
	a.AppRemark = db.AppRemark
 | 
			
		||||
	a.Status = db.Status
 | 
			
		||||
	a.KeyType = db.KeyType
 | 
			
		||||
	a.PublicKey = db.PublicKey
 | 
			
		||||
	a.PrivateKey = db.PrivateKey
 | 
			
		||||
	a.MerchantPublicKey = db.MerchantPublicKey
 | 
			
		||||
	a.CreateTime = db.CreateTime.Format("2006-01-02 15:04:05")
 | 
			
		||||
	a.WhiteIp = db.WhiteIp
 | 
			
		||||
	a.NotifyUrl = db.NotifyUrl
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type AppCreateRequest struct {
 | 
			
		||||
	MerchantId        int64  `json:"merchant_id" validate:"required" label:"商户ID"`
 | 
			
		||||
	AppName           string `json:"app_name" validate:"required" label:"应用名称"`
 | 
			
		||||
	AppRemark         string `json:"app_remark" label:"应用备注"`
 | 
			
		||||
	Status            int    `json:"status" validate:"oneof=0 1 2" label:"应用状态"`
 | 
			
		||||
	KeyType           int    `json:"key_type" validate:"required" label:"应用密钥类型"`
 | 
			
		||||
	PublicKey         string `json:"public_key" validate:"required" label:"应用公钥"`
 | 
			
		||||
	PrivateKey        string `json:"private_key" validate:"required" label:"应用私钥"`
 | 
			
		||||
	MerchantPublicKey string `json:"merchant_public_key"  label:"商户公钥"`
 | 
			
		||||
	WhiteIp           string `json:"white_ip"`
 | 
			
		||||
	NotifyUrl         string `json:"notify_url"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (a *AppCreateRequest) RequestToDb() (db appmodel.App) {
 | 
			
		||||
	db.MerchantId = a.MerchantId
 | 
			
		||||
	db.AppName = a.AppName
 | 
			
		||||
	db.AppRemark = a.AppRemark
 | 
			
		||||
	db.Status = a.Status
 | 
			
		||||
	db.KeyType = a.KeyType
 | 
			
		||||
	db.PublicKey = a.PublicKey
 | 
			
		||||
	db.PrivateKey = a.PrivateKey
 | 
			
		||||
	db.MerchantPublicKey = a.MerchantPublicKey
 | 
			
		||||
	db.WhiteIp = a.WhiteIp
 | 
			
		||||
	db.NotifyUrl = a.NotifyUrl
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type AppUpdateRequest struct {
 | 
			
		||||
	Id                int64  `json:"id" validate:"required" label:"应用ID"`
 | 
			
		||||
	MerchantId        int64  `json:"merchant_id" validate:"required" label:"商户ID"`
 | 
			
		||||
	AppName           string `json:"app_name" validate:"required" label:"应用名称"`
 | 
			
		||||
	AppRemark         string `json:"app_remark" label:"应用备注"`
 | 
			
		||||
	Status            int    `json:"status" validate:"oneof=0 1 2" label:"应用状态"`
 | 
			
		||||
	KeyType           int    `json:"key_type" validate:"required" label:"应用密钥类型"`
 | 
			
		||||
	PublicKey         string `json:"public_key" validate:"required" label:"应用公钥"`
 | 
			
		||||
	PrivateKey        string `json:"private_key" validate:"required" label:"应用私钥"`
 | 
			
		||||
	MerchantPublicKey string `json:"merchant_public_key" label:"商户公钥"`
 | 
			
		||||
	WhiteIp           string `json:"white_ip"`
 | 
			
		||||
	NotifyUrl         string `json:"notify_url"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (a *AppUpdateRequest) RequestToDb() (db appmodel.App) {
 | 
			
		||||
	db.Id = a.Id
 | 
			
		||||
	db.MerchantId = a.MerchantId
 | 
			
		||||
	db.AppName = a.AppName
 | 
			
		||||
	db.AppRemark = a.AppRemark
 | 
			
		||||
	db.Status = a.Status
 | 
			
		||||
	db.KeyType = a.KeyType
 | 
			
		||||
	db.PublicKey = a.PublicKey
 | 
			
		||||
	db.PrivateKey = a.PrivateKey
 | 
			
		||||
	db.MerchantPublicKey = a.MerchantPublicKey
 | 
			
		||||
	db.WhiteIp = a.WhiteIp
 | 
			
		||||
	db.NotifyUrl = a.NotifyUrl
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type GenerateDecryptKeyRequest struct {
 | 
			
		||||
	KeyType int `json:"key_type" label:"密钥类型"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2,6 +2,7 @@ package backend
 | 
			
		|||
 | 
			
		||||
import (
 | 
			
		||||
	"PaymentCenter/app/constants/common"
 | 
			
		||||
	"PaymentCenter/app/http/entities"
 | 
			
		||||
	"PaymentCenter/app/models/paychannelmodel"
 | 
			
		||||
	"PaymentCenter/app/utils"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
| 
						 | 
				
			
			@ -9,16 +10,15 @@ import (
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
type PayChannelResponse struct {
 | 
			
		||||
	Id               int64            `json:"id"`
 | 
			
		||||
	PayName          string           `json:"pay_name"`
 | 
			
		||||
	MerchantId       int64            `json:"merchant_id"`
 | 
			
		||||
	ChannelType      int              `json:"channel_type"`
 | 
			
		||||
	WhiteIp          string           `json:"white_ip"`
 | 
			
		||||
	AppId            string           `json:"app_id"`
 | 
			
		||||
	ExpireTime       string           `json:"expire_time"`
 | 
			
		||||
	CreateTime       string           `json:"create_time"`
 | 
			
		||||
	AliPayPayChannel AliPayPayChannel `json:"ali_pay_pay_channel,omitempty"`
 | 
			
		||||
	WechatPayChannel WechatPayChannel `json:"wechat_pay_channel,omitempty"`
 | 
			
		||||
	Id               int64             `json:"id"`
 | 
			
		||||
	PayName          string            `json:"pay_name"`
 | 
			
		||||
	MerchantId       int64             `json:"merchant_id"`
 | 
			
		||||
	ChannelType      int               `json:"channel_type"`
 | 
			
		||||
	AppId            string            `json:"app_id"`
 | 
			
		||||
	ExpireTime       string            `json:"expire_time"`
 | 
			
		||||
	CreateTime       string            `json:"create_time"`
 | 
			
		||||
	AliPayPayChannel *AliPayPayChannel `json:"ali_pay_pay_channel,omitempty"`
 | 
			
		||||
	WechatPayChannel *WechatPayChannel `json:"wechat_pay_channel,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *PayChannelResponse) ResponseFromDb(db paychannelmodel.PayChannel) {
 | 
			
		||||
| 
						 | 
				
			
			@ -26,32 +26,30 @@ func (p *PayChannelResponse) ResponseFromDb(db paychannelmodel.PayChannel) {
 | 
			
		|||
	p.PayName = db.PayName
 | 
			
		||||
	p.MerchantId = db.MerchantId
 | 
			
		||||
	p.ChannelType = db.ChannelType
 | 
			
		||||
	p.WhiteIp = db.WhiteIp
 | 
			
		||||
	p.AppId = db.AppId
 | 
			
		||||
	p.ExpireTime = db.ExpireTime.Format("2006-01-02 15:04:05")
 | 
			
		||||
	p.CreateTime = db.CreateTime.Format("2006-01-02 15:04:05")
 | 
			
		||||
 | 
			
		||||
	switch p.ChannelType {
 | 
			
		||||
	case common.PAY_CHANNEL_WECHAT_H5 | common.PAY_CHANNEL_WECHAT_JSAPI | common.PAY_CHANNEL_WECHAT_NATIVE | common.PAY_CHANNEL_WECHAT_APP | common.PAY_CHANNEL_WECHAT_MINI:
 | 
			
		||||
	case common.PAY_CHANNEL_WECHAT_H5, common.PAY_CHANNEL_WECHAT_JSAPI, common.PAY_CHANNEL_WECHAT_NATIVE, common.PAY_CHANNEL_WECHAT_APP, common.PAY_CHANNEL_WECHAT_MINI:
 | 
			
		||||
		_ = json.Unmarshal([]byte(db.ExtJson), &p.WechatPayChannel)
 | 
			
		||||
	case common.PAY_CHANNEL_ALIPAY_JSAPI | common.PAY_CHANNEL_ALIPAY_WEB | common.PAY_CHANNEL_ALIPAY_MINI:
 | 
			
		||||
	case common.PAY_CHANNEL_ALIPAY_JSAPI, common.PAY_CHANNEL_ALIPAY_WEB, common.PAY_CHANNEL_ALIPAY_MINI:
 | 
			
		||||
		_ = json.Unmarshal([]byte(db.ExtJson), &p.AliPayPayChannel)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type PayChannelCreateRequest struct {
 | 
			
		||||
	PayName          string           `json:"pay_name"`
 | 
			
		||||
	MerchantId       int64            `json:"merchant_id"`
 | 
			
		||||
	ChannelType      int              `json:"channel_type"` //支付渠道枚举,1微信JSAPI,2微信H5,3微信app,4微信Native,5微信小程序,6支付宝网页&移动应用,7支付宝小程序,8支付宝JSAPI
 | 
			
		||||
	WhiteIp          string           `json:"white_ip"`
 | 
			
		||||
	AppId            string           `json:"app_id"`
 | 
			
		||||
	PayName          string           `json:"pay_name" validate:"required" label:"支付渠道名称"`
 | 
			
		||||
	MerchantId       int64            `json:"merchant_id" validate:"required" label:"商户ID"`
 | 
			
		||||
	ChannelType      int              `json:"channel_type" validate:"required" label:"支付渠道"` //支付渠道枚举,1微信JSAPI,2微信H5,3微信app,4微信Native,5微信小程序,6支付宝网页&移动应用,7支付宝小程序,8支付宝JSAPI
 | 
			
		||||
	AppId            string           `json:"app_id" validate:"required" label:"应用appId"`
 | 
			
		||||
	ExpireTime       string           `json:"expire_time"`
 | 
			
		||||
	AliPayPayChannel AliPayPayChannel `json:"ali_pay_pay_channel,omitempty"`
 | 
			
		||||
	WechatPayChannel WechatPayChannel `json:"wechat_pay_channel,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type WechatPayChannel struct {
 | 
			
		||||
	MchId                      int    `json:"mch_id"`                        //直连商户号
 | 
			
		||||
	MchId                      string `json:"mch_id"`                        //直连商户号
 | 
			
		||||
	MchCertificateSerialNumber string `json:"mch_certificate_serial_number"` //商户证书序列号
 | 
			
		||||
	MchAPIv3Key                string `json:"mch_APIv3_key"`                 //商户APIv3密钥
 | 
			
		||||
	PrivateKeyPath             string `json:"private_key_path"`              //商户私钥文件路径
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +65,6 @@ func (p *PayChannelCreateRequest) RequestToDb() (db paychannelmodel.PayChannel,
 | 
			
		|||
	db.PayName = p.PayName
 | 
			
		||||
	db.MerchantId = p.MerchantId
 | 
			
		||||
	db.ChannelType = p.ChannelType
 | 
			
		||||
	db.WhiteIp = p.WhiteIp
 | 
			
		||||
	db.AppId = p.AppId
 | 
			
		||||
	if p.ExpireTime != "" {
 | 
			
		||||
		db.ExpireTime, err = utils.StrToTimeShanghai(p.ExpireTime)
 | 
			
		||||
| 
						 | 
				
			
			@ -76,12 +73,49 @@ func (p *PayChannelCreateRequest) RequestToDb() (db paychannelmodel.PayChannel,
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
	switch p.ChannelType {
 | 
			
		||||
	case common.PAY_CHANNEL_WECHAT_H5 | common.PAY_CHANNEL_WECHAT_JSAPI | common.PAY_CHANNEL_WECHAT_NATIVE | common.PAY_CHANNEL_WECHAT_APP | common.PAY_CHANNEL_WECHAT_MINI:
 | 
			
		||||
	case common.PAY_CHANNEL_WECHAT_H5, common.PAY_CHANNEL_WECHAT_JSAPI, common.PAY_CHANNEL_WECHAT_NATIVE, common.PAY_CHANNEL_WECHAT_APP, common.PAY_CHANNEL_WECHAT_MINI:
 | 
			
		||||
		b, _ := json.Marshal(p.WechatPayChannel)
 | 
			
		||||
		db.ExtJson = string(b)
 | 
			
		||||
	case common.PAY_CHANNEL_ALIPAY_JSAPI | common.PAY_CHANNEL_ALIPAY_WEB | common.PAY_CHANNEL_ALIPAY_MINI:
 | 
			
		||||
	case common.PAY_CHANNEL_ALIPAY_JSAPI, common.PAY_CHANNEL_ALIPAY_WEB, common.PAY_CHANNEL_ALIPAY_MINI:
 | 
			
		||||
		b, _ := json.Marshal(p.AliPayPayChannel)
 | 
			
		||||
		db.ExtJson = string(b)
 | 
			
		||||
	default:
 | 
			
		||||
		err = errors.New("支付渠道类型错误")
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type PayChannelListRequest struct {
 | 
			
		||||
	MerchantId int64 `json:"merchant_id"`
 | 
			
		||||
	entities.PageRequest
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type PayChannelUpdateRequest struct {
 | 
			
		||||
	Id int64 `json:"id" validate:"required"`
 | 
			
		||||
	PayChannelCreateRequest
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p PayChannelUpdateRequest) RequestToDb() (db paychannelmodel.PayChannel, err error) {
 | 
			
		||||
	db.Id = p.Id
 | 
			
		||||
	db.PayName = p.PayName
 | 
			
		||||
	db.MerchantId = p.MerchantId
 | 
			
		||||
	db.ChannelType = p.ChannelType
 | 
			
		||||
	db.AppId = p.AppId
 | 
			
		||||
	if p.ExpireTime != "" {
 | 
			
		||||
		db.ExpireTime, err = utils.StrToTimeShanghai(p.ExpireTime)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			err = errors.Wrap(err, "时间格式错误")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	switch p.ChannelType {
 | 
			
		||||
	case common.PAY_CHANNEL_WECHAT_H5, common.PAY_CHANNEL_WECHAT_JSAPI, common.PAY_CHANNEL_WECHAT_NATIVE, common.PAY_CHANNEL_WECHAT_APP, common.PAY_CHANNEL_WECHAT_MINI:
 | 
			
		||||
		b, _ := json.Marshal(p.WechatPayChannel)
 | 
			
		||||
		db.ExtJson = string(b)
 | 
			
		||||
	case common.PAY_CHANNEL_ALIPAY_JSAPI, common.PAY_CHANNEL_ALIPAY_WEB, common.PAY_CHANNEL_ALIPAY_MINI:
 | 
			
		||||
		b, _ := json.Marshal(p.AliPayPayChannel)
 | 
			
		||||
		db.ExtJson = string(b)
 | 
			
		||||
	default:
 | 
			
		||||
		err = errors.New("支付渠道类型错误")
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,4 +13,15 @@ var BackendRequestMap = map[string]func() interface{}{
 | 
			
		|||
	common.ADMIN_V1 + "/merchant/update": func() interface{} { return new(backend.MerchantUpdateRequest) },
 | 
			
		||||
	common.ADMIN_V1 + "/merchant/list":   func() interface{} { return new(backend.MerchantListRequest) },
 | 
			
		||||
	common.ADMIN_V1 + "/merchant/delete": func() interface{} { return new(entities.IdRequest) },
 | 
			
		||||
	// 支付方式
 | 
			
		||||
	common.ADMIN_V1 + "/paychannel/create": func() interface{} { return new(backend.PayChannelCreateRequest) },
 | 
			
		||||
	common.ADMIN_V1 + "/paychannel/update": func() interface{} { return new(backend.PayChannelUpdateRequest) },
 | 
			
		||||
	common.ADMIN_V1 + "/paychannel/list":   func() interface{} { return new(backend.PayChannelListRequest) },
 | 
			
		||||
	common.ADMIN_V1 + "/paychannel/delete": func() interface{} { return new(entities.IdRequest) },
 | 
			
		||||
	// 应用
 | 
			
		||||
	common.ADMIN_V1 + "/app/create":  func() interface{} { return new(backend.AppCreateRequest) },
 | 
			
		||||
	common.ADMIN_V1 + "/app/update":  func() interface{} { return new(backend.AppUpdateRequest) },
 | 
			
		||||
	common.ADMIN_V1 + "/app/list":    func() interface{} { return new(backend.AppListRequest) },
 | 
			
		||||
	common.ADMIN_V1 + "/app/delete":  func() interface{} { return new(entities.IdRequest) },
 | 
			
		||||
	common.ADMIN_V1 + "/app/decrypt": func() interface{} { return new(backend.GenerateDecryptKeyRequest) },
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,6 +31,21 @@ func RegisterAdminRoute(router *gin.Engine) {
 | 
			
		|||
		merchant.POST("/create", backend.MerchantCreate)   // 商户创建
 | 
			
		||||
		merchant.PUT("/update", backend.MerchantUpdate)    // 商户更新
 | 
			
		||||
		merchant.DELETE("/delete", backend.MerchantDelete) // 商户删除
 | 
			
		||||
		// 支付方式
 | 
			
		||||
		pay := v1.Group("/paychannel")
 | 
			
		||||
		pay.GET("/list", backend.PayChannelList)        // 支付方式列表
 | 
			
		||||
		pay.POST("/create", backend.PayChannelCreate)   // 支付方式创建
 | 
			
		||||
		pay.PUT("/update", backend.PayChannelUpdate)    // 支付方式更新
 | 
			
		||||
		pay.DELETE("/delete", backend.PayChannelDelete) // 支付方式删除
 | 
			
		||||
 | 
			
		||||
		// 应用管理
 | 
			
		||||
		app := v1.Group("/app")
 | 
			
		||||
		app.GET("/list", backend.AppList)            // 应用列表
 | 
			
		||||
		app.POST("/create", backend.AppCreate)       // 应用创建
 | 
			
		||||
		app.PUT("/update", backend.AppUpdate)        // 应用更新
 | 
			
		||||
		app.DELETE("/delete", backend.AppDelete)     // 应用删除
 | 
			
		||||
		app.GET("/decrypt", backend.GenerateDecrypt) // 生成密钥对
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ var (
 | 
			
		|||
 | 
			
		||||
// 实体
 | 
			
		||||
type App struct {
 | 
			
		||||
	Id                int64     `xorm:"pk autoincr AUTO_RANDOM"`
 | 
			
		||||
	Id                int64
 | 
			
		||||
	MerchantId        int64     `xorm:"'merchant_id' bigint(20)"`
 | 
			
		||||
	AppName           string    `xorm:"'app_name' varchar(128)"`
 | 
			
		||||
	AppRemark         string    `xorm:"'app_remark' varchar(255)"`
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +22,8 @@ type App struct {
 | 
			
		|||
	PublicKey         string    `xorm:"'public_key' varchar(1024)"`
 | 
			
		||||
	PrivateKey        string    `xorm:"'private_key' varchar(1024)"`
 | 
			
		||||
	MerchantPublicKey string    `xorm:"'merchant_public_key' varchar(1024)"`
 | 
			
		||||
	NotifyUrl         string    `xorm:"'notify_url' varchar(128)"`
 | 
			
		||||
	WhiteIp           string    `xorm:"'white_ip' varchar(128)"`
 | 
			
		||||
	CreateTime        time.Time `xorm:"'create_time' datetime created"`
 | 
			
		||||
	UpdateTime        time.Time `xorm:"'update_time' timestamp updated"`
 | 
			
		||||
	DeleteTime        time.Time `xorm:"'delete_time' timestamp deleted"`
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,11 +16,11 @@ type Orders struct {
 | 
			
		|||
	Id               int64
 | 
			
		||||
	MerchantId       int64     `xorm:"'merchant_id' bigint(20)"`
 | 
			
		||||
	PayId            int64     `xorm:"'pay_id' bigint(20)"`
 | 
			
		||||
	AppId            int64     `xorm:"'app_id' bigint(20)"`
 | 
			
		||||
	MerchantOrderId  string    `xorm:"'merchant_order_id' varchar(128)"`
 | 
			
		||||
	Status           int       `xorm:"'status' int(11)"`
 | 
			
		||||
	OrderType        int       `xorm:"'order_type' int(11)"`
 | 
			
		||||
	Amount           int       `xorm:"'amount' int(11)"`
 | 
			
		||||
	NotifyUrl        string    `xorm:"'notify_url' varchar(255)"`
 | 
			
		||||
	IpAddress        string    `xorm:"'ip_address' varchar(128)"`
 | 
			
		||||
	MerchantRequest  string    `xorm:"'merchant_request' varchar(2048)"`
 | 
			
		||||
	MerchantResponse string    `xorm:"'merchant_response' varchar(255)"`
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,16 +14,16 @@ var (
 | 
			
		|||
// 实体
 | 
			
		||||
type PayChannel struct {
 | 
			
		||||
	Id          int64
 | 
			
		||||
	PayName     string    `xorm:"'pay_name' varchar(128)"`
 | 
			
		||||
	MerchantId  int64     `xorm:"'merchant_id' bigint(20)"`
 | 
			
		||||
	ChannelType int       `xorm:"'channel_type' int(11)"`
 | 
			
		||||
	WhiteIp     string    `xorm:"'white_ip' varchar(1024)"`
 | 
			
		||||
	AppId       string    `xorm:"'app_id' varchar(255)"`
 | 
			
		||||
	ExtJson     string    `xorm:"'ext_json' JSON"`
 | 
			
		||||
	ExpireTime  time.Time `xorm:"'expire_time' datetime"`
 | 
			
		||||
	CreateTime  time.Time `xorm:"'create_time' datetime created"`
 | 
			
		||||
	UpdateTime  time.Time `xorm:"'update_time' timestamp updated"`
 | 
			
		||||
	DeleteTime  time.Time `xorm:"'delete_time' timestamp deleted"`
 | 
			
		||||
	PayName     string `xorm:"'pay_name' varchar(128)"`
 | 
			
		||||
	MerchantId  int64  `xorm:"'merchant_id' bigint(20)"`
 | 
			
		||||
	ChannelType int    `xorm:"'channel_type' int(11)"`
 | 
			
		||||
 | 
			
		||||
	AppId      string    `xorm:"'app_id' varchar(255)"`
 | 
			
		||||
	ExtJson    string    `xorm:"'ext_json' JSON"`
 | 
			
		||||
	ExpireTime time.Time `xorm:"'expire_time' datetime"`
 | 
			
		||||
	CreateTime time.Time `xorm:"'create_time' datetime created"`
 | 
			
		||||
	UpdateTime time.Time `xorm:"'update_time' timestamp updated"`
 | 
			
		||||
	DeleteTime time.Time `xorm:"'delete_time' timestamp deleted"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 表名
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,86 @@
 | 
			
		|||
package services
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"PaymentCenter/app/constants/errorcode"
 | 
			
		||||
	"PaymentCenter/app/data"
 | 
			
		||||
	"PaymentCenter/app/http/entities"
 | 
			
		||||
	"PaymentCenter/app/http/entities/backend"
 | 
			
		||||
	"PaymentCenter/app/models/appmodel"
 | 
			
		||||
	"PaymentCenter/app/models/merchantmodel"
 | 
			
		||||
	"PaymentCenter/app/models/paychannelmodel"
 | 
			
		||||
	"xorm.io/builder"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func AppList(req backend.AppListRequest) (result []appmodel.App, total int64, code int) {
 | 
			
		||||
	repo := data.NewAppRepo(paychannelmodel.GetInstance().GetDb())
 | 
			
		||||
	// 拼接查询条件
 | 
			
		||||
	conn := builder.NewCond()
 | 
			
		||||
	if req.MerchantId > 0 {
 | 
			
		||||
		conn = conn.And(builder.Eq{"merchant_id": req.MerchantId})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 调用repo
 | 
			
		||||
	appList := make([]appmodel.App, 0)
 | 
			
		||||
	count, err := repo.AppList(conn, req.PageRequest, &appList)
 | 
			
		||||
	code = handErr(err)
 | 
			
		||||
	return appList, count, code
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func AppCreate(App *appmodel.App) (code int) {
 | 
			
		||||
	db := paychannelmodel.GetInstance().GetDb()
 | 
			
		||||
	repo := data.NewAppRepo(db)
 | 
			
		||||
	merchantRepo := data.NewMerchantRepo(db)
 | 
			
		||||
	// 拼接查询条件
 | 
			
		||||
	conn := builder.NewCond()
 | 
			
		||||
	conn = conn.And(builder.Eq{"id": App.MerchantId})
 | 
			
		||||
	merchant := merchantmodel.Merchant{}
 | 
			
		||||
	has, err := merchantRepo.MerchantDetail(&merchant, conn)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return handErr(err)
 | 
			
		||||
	}
 | 
			
		||||
	if !has {
 | 
			
		||||
		return errorcode.MerchantNotFound
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, err = repo.AppInsertOne(App)
 | 
			
		||||
	code = handErr(err)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func AppUpdate(App *appmodel.App) (code int) {
 | 
			
		||||
	db := paychannelmodel.GetInstance().GetDb()
 | 
			
		||||
	repo := data.NewAppRepo(db)
 | 
			
		||||
	merchantRepo := data.NewMerchantRepo(db)
 | 
			
		||||
	// 拼接查询条件
 | 
			
		||||
	conn := builder.NewCond()
 | 
			
		||||
	conn = conn.And(builder.Eq{"id": App.MerchantId})
 | 
			
		||||
	merchant := merchantmodel.Merchant{}
 | 
			
		||||
	has, err := merchantRepo.MerchantDetail(&merchant, conn)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return handErr(err)
 | 
			
		||||
	}
 | 
			
		||||
	if !has {
 | 
			
		||||
		return errorcode.MerchantNotFound
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 拼接查询条件
 | 
			
		||||
	uconn := builder.NewCond()
 | 
			
		||||
	uconn = uconn.And(builder.Eq{"Id": App.Id})
 | 
			
		||||
	_, err = repo.AppUpdate(App, uconn, "app_remark")
 | 
			
		||||
 | 
			
		||||
	code = handErr(err)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func AppDelete(req entities.IdRequest) (code int) {
 | 
			
		||||
	repo := data.NewAppRepo(paychannelmodel.GetInstance().GetDb())
 | 
			
		||||
 | 
			
		||||
	// 拼接查询条件
 | 
			
		||||
	conn := builder.NewCond()
 | 
			
		||||
	conn = conn.And(builder.Eq{"Id": req.Id})
 | 
			
		||||
	m := appmodel.App{Id: req.Id}
 | 
			
		||||
	_, err := repo.AppDelete(&m, conn)
 | 
			
		||||
 | 
			
		||||
	code = handErr(err)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,85 @@
 | 
			
		|||
package services
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"PaymentCenter/app/constants/errorcode"
 | 
			
		||||
	"PaymentCenter/app/data"
 | 
			
		||||
	"PaymentCenter/app/http/entities"
 | 
			
		||||
	"PaymentCenter/app/http/entities/backend"
 | 
			
		||||
	"PaymentCenter/app/models/merchantmodel"
 | 
			
		||||
	"PaymentCenter/app/models/paychannelmodel"
 | 
			
		||||
	"xorm.io/builder"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func PayChannelList(req backend.PayChannelListRequest) (result []paychannelmodel.PayChannel, total int64, code int) {
 | 
			
		||||
	repo := data.NewPayChannelRepo(paychannelmodel.GetInstance().GetDb())
 | 
			
		||||
	// 拼接查询条件
 | 
			
		||||
	conn := builder.NewCond()
 | 
			
		||||
	if req.MerchantId > 0 {
 | 
			
		||||
		conn = conn.And(builder.Eq{"merchant_id": req.MerchantId})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 调用repo
 | 
			
		||||
	paychannelList := make([]paychannelmodel.PayChannel, 0)
 | 
			
		||||
	count, err := repo.PayChannelList(conn, req.PageRequest, &paychannelList)
 | 
			
		||||
	code = handErr(err)
 | 
			
		||||
	return paychannelList, count, code
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PayChannelCreate(payChannel *paychannelmodel.PayChannel) (code int) {
 | 
			
		||||
	db := paychannelmodel.GetInstance().GetDb()
 | 
			
		||||
	repo := data.NewPayChannelRepo(db)
 | 
			
		||||
	merchantRepo := data.NewMerchantRepo(db)
 | 
			
		||||
	// 拼接查询条件
 | 
			
		||||
	conn := builder.NewCond()
 | 
			
		||||
	conn = conn.And(builder.Eq{"id": payChannel.MerchantId})
 | 
			
		||||
	merchant := merchantmodel.Merchant{}
 | 
			
		||||
	has, err := merchantRepo.MerchantDetail(&merchant, conn)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return handErr(err)
 | 
			
		||||
	}
 | 
			
		||||
	if !has {
 | 
			
		||||
		return errorcode.MerchantNotFound
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, err = repo.PayChannelInsertOne(payChannel)
 | 
			
		||||
	code = handErr(err)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PayChannelUpdate(payChannel *paychannelmodel.PayChannel) (code int) {
 | 
			
		||||
	db := paychannelmodel.GetInstance().GetDb()
 | 
			
		||||
	repo := data.NewPayChannelRepo(db)
 | 
			
		||||
	merchantRepo := data.NewMerchantRepo(db)
 | 
			
		||||
	// 拼接查询条件
 | 
			
		||||
	conn := builder.NewCond()
 | 
			
		||||
	conn = conn.And(builder.Eq{"id": payChannel.MerchantId})
 | 
			
		||||
	merchant := merchantmodel.Merchant{}
 | 
			
		||||
	has, err := merchantRepo.MerchantDetail(&merchant, conn)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return handErr(err)
 | 
			
		||||
	}
 | 
			
		||||
	if !has {
 | 
			
		||||
		return errorcode.MerchantNotFound
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 拼接查询条件
 | 
			
		||||
	uconn := builder.NewCond()
 | 
			
		||||
	uconn = uconn.And(builder.Eq{"Id": payChannel.Id})
 | 
			
		||||
	_, err = repo.PayChannelUpdate(payChannel, uconn, "white_ip")
 | 
			
		||||
 | 
			
		||||
	code = handErr(err)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PayChannelDelete(req entities.IdRequest) (code int) {
 | 
			
		||||
	repo := data.NewPayChannelRepo(paychannelmodel.GetInstance().GetDb())
 | 
			
		||||
 | 
			
		||||
	// 拼接查询条件
 | 
			
		||||
	conn := builder.NewCond()
 | 
			
		||||
	conn = conn.And(builder.Eq{"Id": req.Id})
 | 
			
		||||
	m := paychannelmodel.PayChannel{Id: req.Id}
 | 
			
		||||
	_, err := repo.PayChannelDelete(&m, conn)
 | 
			
		||||
 | 
			
		||||
	code = handErr(err)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue