zoukankan      html  css  js  c++  java
  • 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()
    
    }
    

      

  • 相关阅读:
    编译错误
    __attribute__
    strcmp-sse2-unaligned.S: No such file or directory.
    boost多线程编译出错
    QByteArray与QString的互相转换
    ffplay播放黑广播的声音
    ./configure详解
    linux发行版安装vmci.sys版本错误
    linux命令
    open函数的打开标志所在文件
  • 原文地址:https://www.cnblogs.com/ruanqin/p/13897633.html
Copyright © 2011-2022 走看看