GithubHelp home page GithubHelp logo

wechat-sdk's Introduction

wechat-sdk

Update

更新至V3版本微信API

如何在项目中引用

V2版本微信API

// get go mod
go get github.com/pyihe/wechat-sdk@v1.0.0

// import in project
import "github.com/pyihe/wechat-sdk"

v2版本API文档

V3版本微信API

// get go mod
go get github.com/pyihe/wechat-sdk/v3@v3.0.0

// import in project
import "github.com/pyihe/wechat-sdk/v3"

Usage

NOTE:

  1. 考虑v3版本的微信API参数较多且存在很多嵌套的结构体, 对于只需要body参数的API, 本package统统使用interface{}作为函数形参,请调用者自己构造可序列化的参数体( 结构体、map或者序列化好了的json字符串或者字节切片[]byte)!
  2. 对于非interface{}的形参, 调用者只需要按照函数规定传参即可!
  3. 对于不同功能但应答参数相似的API(如预支付API和支付查询API等), 本package为了避免重复声明接收API应答参数的结构体, 最终使用了公共的结构体, 调用者处理API返回结果时, 请严格参考 微信官方文档 忽略掉文档没有的参数!
  4. 对于微信异步回调回来的通知, 本package会将通知结果反序列化至对应的应答结构体, 请调用者根据结果处理自己的业务逻辑, 并在处理完成后一定告知微信服务器!
package main

import (
	"github.com/pyihe/wechat-sdk/v3/service"
	"github.com/pyihe/wechat-sdk/v3/service/mini"
	"github.com/pyihe/wechat-sdk/v3/service/official"
	"github.com/pyihe/wechat-sdk/v3/service/payment/merchant"
)

// WechatConfig 微信相关参数配置
var WechatConfig struct {
	AppId          string `json:"appid"`       // 应用ID
	MchId          string `json:"mchid"`       // 商户号
	SerialNo       string `json:"serial_no"`   // 商户证书序列号
	Apikey         string `json:"apikey"`      // API v3 Key
	PrivateKeyPath string `json:"private_key"` // 商户平台私钥文件
	PublicKeyPath  string `json:"public_key"`  // 商户微信支付平台公钥文件
}

// PayBody 支付请求参数
type PayBody struct {
	AppId       string  `json:"appid"`        // 应用ID
	MchId       string  `json:"mchid"`        // 商户号
	Description string  `json:"description"`  // 商品描述
	OutTradeNo  string  `json:"out_trade_no"` // 商户订单号
	NotifyUrl   string  `json:"notify_url"`   // 支付异步回调通知
	Amount      *Amount `json:"amount"`       // 订单金额信息
	Payer       *Payer  `json:"payer"`        // 支付者
}

type Amount struct {
	Total    int64  `json:"total"`              // 订单总金额
	Currency string `json:"currency,omitempty"` // 货币类型
}

type Payer struct {
	OpenId string `json:"openid"` // 用户标识
}

func handleErr(err error) {
	//...
}

func main() {
    var opts = []service.Option{
        service.WithAppId(WechatConfig.AppId),
        service.WithMchId(WechatConfig.MchId),
        service.WithApiV3Key(WechatConfig.Apikey),
        service.WithSerialNo(WechatConfig.SerialNo),
    }
    var srvConfig = service.NewConfig(opts...)
    
    var param = &PayBody{
        AppId:       "wxdace645e0bc2cXXX",
        MchId:       "1900006XXX",
        Description: "Image形象店-深圳腾大-QQ公仔",
        OutTradeNo:  "1217752501201407033233368318",
        NotifyUrl:   "https://weixin.qq.com/",
        Amount: &Amount{
            Total:    1,
            Currency: "CNY",
        },
        Payer: &Payer{OpenId: "o4GgauInH_RCEdvrrNGrntXDuXXX"},
    }
    // 普通商户支付
    merchantResponse, err := merchant.JSAPI(srvConfig, param)
    if err != nil {
        handleErr(err)
    }
    // 小程序获取用户openid
    miniData, err := mini.GetOpenId(srvConfig, "your jsCode")
    if err != nil {
        handleErr(err)
    }
    // 公众号获取用户openid
    officialData, err := official.GetOpenId(srvConfig, "your grant code")
    if err != nil {
        handleErr(err)
    }
}

TODO

致谢

感谢Jetbrains开源开发许可证 提供的免费开发工具支持!

wechat-sdk's People

Contributors

pyihe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.