设为首页 加入收藏

TOP

微信支付-golang后端处理(一)
2017-09-30 13:28:13 】 浏览:8520
Tags:支付 -golang 后端 处理

 

一、支付流程

微信开放平台H5支付接入相关链接:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4

相应的支付流程:

微信支付接口流程图

 

二、相关代码

1、统一下单

 

//首先定义一个UnifyOrderReq用于填入我们要传入的参数。
type UnifyOrderReq struct {
    Appid            string `xml:"appid"`
    Body             string `xml:"body"`
    Mch_id           string `xml:"mch_id"`
    Nonce_str        string `xml:"nonce_str"`
    Notify_url       string `xml:"notify_url"`
    Trade_type       string `xml:"trade_type"`
    Spbill_create_ip string `xml:"spbill_create_ip"`
    Total_fee        int    `xml:"total_fee"`
    Out_trade_no     string `xml:"out_trade_no"`
    Sign             string `xml:"sign"`
}
 
 
//wxpay计算签名的函数
func (o *APIHandler) wxpayCalcSign(mReq map[string]interface{}, key string) (sign string) {
 
 
    log4go.Debug("wxpayCalcSign()...API KEY:%s", key)
    //STEP 1, 对key进行升序排序.
    sorted_keys := make([]string, 0)
    for k, _ := range mReq {
        sorted_keys = append(sorted_keys, k)
    }
 
 
    sort.Strings(sorted_keys)
 
 
    //STEP2, 对key=value的键值对用&连接起来,略过空值
    var signStrings string
    for _, k := range sorted_keys {
        fmt.Printf("k=%v, v=%v\n", k, mReq[k])
        value := fmt.Sprintf("%v", mReq[k])
        if value != "" {
            signStrings = signStrings + k + "=" + value + "&"
        }
    }
 
 
    //STEP3, 在键值对的最后加上key=API_KEY
    if key != "" {
        signStrings = signStrings + "key=" + key
    }
 
 
    log4go.Debug("wxpayCalcSign()...signStrings:%s", signStrings)
 
 
    //STEP4, 进行MD5签名并且将所有字符转为大写.
    md5Ctx := md5.New()
    md5Ctx.Write([]byte(signStrings))
    cipherStr := md5Ctx.Sum(nil)
    upperSign := strings.ToUpper(hex.EncodeToString(cipherStr))
    return upperSign
}
 
 
func (o *APIHandler) wxUnifyChargeReq(userId int64, orderNo string) (string, error) {
 
 
    log4go.Debug("wxUnifyChargeReq()...userId:%d, orderNo:%s", userId, orderNo)
    bookOrder, err := o.GetOrderByOrderNoDb(orderNo)
    if err != nil {
        log4go.Error("wxUnifyChargeReq
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Go语言之旅 下一篇Golang学习-第一篇 Golang的简单..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目