美文网首页
Golang微信支付代码

Golang微信支付代码

作者: cowkeys | 来源:发表于2016-11-16 18:28 被阅读0次

    说明

    之前的项目有涉及到支付接口,包括微信和支付宝支付, 现在记录一下
    github地址:Golang-Payment

    使用到的库

    1. 网上找的微信支付接口代码 地址,不过我在项目中需要使用到更多的参数,因此改了小部分源码。如果使用的话还是需要自己实现的。
    2. 微信需要自己生成二维码,因此我找了一个二维码的库 odeke-em/qr,我稍微修改了一下放在vendor目录下

    注意,我使用了beego,所以可能有beego的语法

    代码有两个部分

    1. payment/models/Wxpay 这是前面说的接口实现代码,也需要自己做一些修改。
    2. /payment/controller/wxpay.go wxpay.go

    /payment/controller/wxpay.go:

    package Payment
    
    import (
    
    "encoding/base64"
    
    "fmt"
    
    "odeke-em/qr"
    
    "os"
    
    "payment/models/Wxpay"
    
    "strconv"
    
    "time"
    
    "github.com/astaxie/beego"
    
    )
    
    type WxpayController struct {
    
    beego.Controller
    
    }
    
    func (this *WxpayController) Native() {
    
    orderNumber := this.Ctx.Input.Param(":id") //获取订单号
    
    payAmount := this.GetString("price") //获取价格
    
    params := make(map[string]interface{})
    
    params["body"] = "****company-" + orderNumber //显示标题
    
    params["out_trade_no"] = orderNumber
    
    params["total_fee"] = payAmount
    
    params["product_id"] = orderNumber
    
    params["attach"] = "abc" //自定义参数
    
    var modwx Wxpay.UnifyOrderReq
    
    res := modwx.CreateOrder(this.Ctx, params)
    
    this.Data["data"] = res
    
    //拿到数据之后,需要生成二维码。
    
    this.Data["Image"] = Img(res.Code_url)
    
    this.TplName = "Wxpay/index.tpl"
    
    }
    
    func (this *WxpayController) Notify() {
    
    var notifyReq Wxpay.WXPayNotifyReq
    
    res := notifyReq.WxpayCallback(this.Ctx)
    
    //beego.Debug("res",res)
    
    if res != nil {
    
    //这里可以组织res的数据 处理自己的业务逻辑:
    
    sendData := make(map[string]interface{})
    
    sendData["id"] = res["out_trade_no"]
    
    sendData["trade_no"] = res["transaction_id"]
    
    paid_time, _ := time.Parse("20060102150405", res["time_end"].(string))
    
    paid_timestr := paid_time.Format("2006-01-02 15:04:05")
    
    sendData["paid_time"] = paid_timestr
    
    sendData["payment_type"] = "wxpay"
    
    intfee := res["cash_fee"].(int)
    
    floatfee := float64(intfee)
    
    cashfee := floatfee / 100
    
    sendData["payment_amount"] = strconv.FormatFloat(cashfee, 'f', 2, 32)
    
    //api(sendData)...自己的逻辑处理
    
    //
    
    }
    
    }
    
    func Img(url string) string {
    
    code, err := qr.Encode(url, qr.H)
    
    if err != nil {
    
    fmt.Println(err)
    
    os.Exit(1)
    
    }
    
    imgByte := code.PNG()
    
    str := base64.StdEncoding.EncodeToString(imgByte)
    
    return str
    
    }
    

    相关文章

      网友评论

          本文标题:Golang微信支付代码

          本文链接:https://www.haomeiwen.com/subject/maprpttx.html