go支付通道基类-适应任何支付通道

用go优雅的实现集成各支付通道接口,业务代码正在开发中,基本结构如下

package main

import (
	"fmt"
)

type Pay interface {
	getName() string                           //支付通道名称
	getPayUrl() string                         //获取支付url
	query(signMap map[string]interface{}) bool //签名校验
	setAmount(amount float64) float64          //支付金额
}

type WxPay struct {
}

func (p *WxPay) getName() string {
	fmt.Println("我是微信支付哦")
	return "微信支付"
}

func (p *WxPay) setAmount(amount float64) float64 {
	return amount
}

func (p *WxPay) getPayUrl() string {
	fmt.Println("我是微信支付的url哦哈哈哈")
	return "http://**.**.**.**"
}

func (p *WxPay) query(signMap map[string]interface{}) bool {
	return true
}

type AliPay struct {
	name string
}

func (p *AliPay) query(signMap map[string]interface{}) bool {
	return true
}

func (p *AliPay) getName() string {
	fmt.Println("我是Ali支付哦" + p.name)
	return p.name
}

func (p *AliPay) setAmount(amount float64) float64 {
	return amount
}

func (p *AliPay) getPayUrl() string {
	fmt.Println("我是Ali支付的url哦哈哈哈")
	return "https://alipay.**.**.**"
}

func NewWxPay() Pay {
	fmt.Println("wx init")
	return &WxPay{}
}

func NewAliPay() Pay {
	fmt.Println("ali init")
	return &AliPay{name: "我是ali的name牛啤了"}
}

var myPays = make(map[string]Pay)

func Register(key string, pay Pay) {
	myPays[key] = pay
}

func init() {
	Register("wx", NewWxPay())
	Register("ali", NewAliPay())
}

func getPay(key string) Pay {
	return myPays[key]
}

func main() {
	wx := getPay("wx")
	wx.getName()
	wx.setAmount(1000.01)
	wx.getPayUrl()

	ali := getPay("ali")
	ali.getName()
	ali.setAmount(200.15)
	ali.getPayUrl()

}

  

原文地址:https://www.cnblogs.com/ruanqin/p/13897633.html