美文网首页
Golang支付宝支付代码

Golang支付宝支付代码

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

    说明

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

    使用到的库

    go get github.com/ascoders/alipay
    

    这是github上一个不错的支付宝接口,一般来说直接import进项目就行了,不过我在项目中需要使用到更多的参数,因此改了小部分源码。

    注意,里面用到了beego的库。

    代码有两个部分

    1. /payment/vendor/alipay/ alipay
    2. /payment/controller/alipay.go alipay.go

    /payment/controller/alipay.go:

    package Payment
    
    import (
        "alipay"
        "strconv"
        "strings"
        "github.com/astaxie/beego"
    )
    
    type AlipayController struct {
        beego.Controller
    }
    
    func newClient() *alipay.Client {
        return &alipay.Client{
            Partner:   beego.AppConfig.String("alipartner"),                               // 合作者ID
            Key:       beego.AppConfig.String("alikey"),                                   // 合作者私钥
            ReturnUrl: "http://" + beego.AppConfig.String("domainurl") + "/alipay/return", // 同步返回地址
            NotifyUrl: "http://" + beego.AppConfig.String("domainurl") + "/alipay/notify", // 网站异步返回地址
            Email:     beego.AppConfig.String("aliemail"),                                 // 网站卖家邮箱地址
        }
    }
    
    func (this *AlipayController) Native() {
        orderNo := this.GetString("orderNo") //获取自己的订单号
        schemestr := this.Ctx.Input.Site()  
        alipayClient := newClient()
        fee, _ := strconv.ParseFloat("100.5")//价格转换
        ots := alipay.Options{
                OrderId:            orderNo,
                Fee:                float32(fee),
                NickName:           "ricky",
                Subject:            "某某订单" + orderNo,
                Extra_common_param: schemestr, //加上自己需要用到的参数
        }
        form := alipayClient.Form(ots)
        res := map[string]interface{}{"form": form}
        this.Data["json"] = res
        this.ServeJSON()
    }
    
    func (this *AlipayController) Return() {
        alipayClient := newClient()
        result := alipayClient.Return(&this.Controller)
        //beego.Debug("notify", result)
        if result.Status == 1 { //付款成功,处理订单
            //处理订单
            if result.Extra_common_param != "" {
                    url := typestr[1] + "/order/detail/" + result.OrderNo
                    this.Ctx.Redirect(302, url)
            }
        } else {
            res := map[string]interface{}{"msg": "来源验证失败"}
            this.Data["json"] = res
            this.ServeJSON()
        }
    }
    
    func (this *AlipayController) Notify() {
        alipayClient := newClient()
        result := alipayClient.Notify(&this.Controller)
    
        timetest := this.GetString("gmt_payment")
        if result.Status == 1 { //付款成功,处理订单
            sendData := make(map[string]interface{})
            sendData["id"] = result.OrderNo
            sendData["trade_no"] = result.TradeNo
            sendData["paid_time"] = timetest
            sendData["payment_type"] = "alipay"
            sendData["payment_amount"] = result.TotalFee
            //这里处理自己的业务逻辑
            if result.Extra_common_param != "" {
                //your method 例如修改数据库中订单的状态为付款。。
            }
    
        }
    }
    

    相关文章

      网友评论

          本文标题:Golang支付宝支付代码

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