• 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()
    
    }
    

      

  • 相关阅读:
    约瑟夫问题的解法集锦
    java调用com组件将office文件转换成pdf
    hdu(1069)——Monkey and Banana(LIS变形)
    Unix网络编程之环境搭建
    atitit. java queue 队列体系and自己定义基于数据库的队列总结o7t
    怎样使Dialog像Activity一样随心所欲的使用?
    获取全部分组中某列最大的行
    Class C++
    spring mvc +Mybatis3.1 整合的时候异常
    Linux 编译C++ 与 设置 Vim
  • 原文地址:https://www.cnblogs.com/ruanqin/p/13897633.html
Copyright © 2020-2023  润新知