wechat_sdk

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 28, 2022 License: MIT Imports: 22 Imported by: 0

README

wechat-sdk

最重要的事

如果在使用过程中存在任何bug,还请指出,非常感谢!

致谢

Jetbrains Tools

功能列表
小程序
Name Explain comment
GetUserPhoneForMini 小程序获取电话号码 客户端调用微信接口获取加密信息时不能在回调中再次调用登陆接口, 否则会让session_key失效
GetSessionKeyAndOpenId 通过小程序授权code获取session_key和用户openid
GetAccessTokenForMini 小程序获取AccessToken
GetUserInfoForMini 小程序获取用户基本信息
公众号
Name Explain comment
GetAppBaseAccessToken 公众号开发获取基础接口调用Access_Token 用于调用其他接口
GetAppOauthAccessToken 公众号开发通过code获取网页授权Access_Token 此Access_Token用于拉取用户信息, code只能用一次
RefreshOauthToken 公众号开发刷新网页授权Access_Token
GetAppUserInfo 公众号开发拉取用户信息 返回结果参考微信文档
CheckOauthToken 公众号开发校验网页授权Access_Token是否有效
微信支付
Name Explain comment
CloseOrder 关闭订单
DownloadBill 下载对账单
DownloadComment 拉取订单评论
DownloadFundFlow 下载资金账单
GetPublicKey 获取RSA加密公钥
RefundOrder 申请退款
RefundNotify 解析微信退款回调内容, 主要是对req_info解密
RefundQuery 退款查询
Report 向微信发送接口调用结果的报告, 包括接口调用时间
ReverseOrder 撤销订单
Transfers 企业付款到用户零钱
TransfersQuery 查询企业付款到用户零钱的结果
TransferBank 企业付款到银行卡 未测试
TransferBankQuery 查询企业付款到银行卡的结果 未测试
UnifiedMicro 扫码下单 如果需要传detail参数, 参数格式参照单品优惠活动detail字段列表说明
UnifiedOrder 统一下单: H5/APP/MWEB/NATIVE 返回给前端的唤起支付参数中, package = prepay_id=xxxxxxx
UnifiedQuery 下单结果查询
商户分账
Name Explain comment
ProfitSharing 申请分账(单次或多次) multiTag标志是否是多次分账
QueryProfitSharing 查询分账请求的结果 非分账的结果,而是分账申请的结果
AddProfitSharingReceiver 添加分账接收方
RemoveProfitSharingReceiver 删除分账接受方
FinishProfitSharing 完结分账 如果订单不需要(再)分账, 且剩余待分账金额不为0时, 调用本接口将剩余金额冻结给特约商户
ReturnProfitSharing 分账回退 对已分账的订单进行退款时,先调用本接口将金额从分账接收方回退给商户(非异步, 同步回传回退结果)
QueryProfitSharingReturn 回退结果查询 用于核实回退结果
ProfitSharingNotify 分账动帐通知 分账或分账回退成功后, 微信会将结果发送给商户, 通知结果包含加密信息, 此处解密密钥为ApiV3密钥。接口返回结果中忽略层级关系,对于需要的字段直接使用Get方法获取值。通知url在商户平台配置,详情参加分账动帐通知
现金红包
Name Explain comment
SendRedPack 发放现金红包
SendGroupRedPack 发放裂变红包
GetRedPackRecords 查询红包记录

Notice: NewPayer()必须传入所有需要使用的微信参数, 使用过程中所有请求接口都不需要加入appid/mch_id/ApiKey/secret/sign/ApiV3Key参数

Usage Example:
package main

import (
    "fmt"
    dev "github.com/pyihe/wechat-sdk"
)

func main() {
    var appId, mchId, apiKey, apiSecret string
    
    client := dev.NewPayer(dev.WithAppId(appId), dev.WithMchId(mchId), dev.WithApiKey(apiKey), dev.WithSecret(apiSecret))
    
    //unified order
    param := dev.NewParam()
    param.Add("nonce_str", "yourNonceStr")
    param.Add("body", "yourBody")
    param.Add("out_trade_no", "yourOutTradeNo")
    param.Add("total_fee", 1)
    param.Add("spbill_create_ip", "yourIp")
    param.Add("notify_url", "yourUrl")
    param.Add("trade_type", "JSAPI")
    result, err := client.UnifiedOrder(param)
    if err != nil {
        handleErr(err)
    }
    appId, _ = result.GetString("apppid")
    prepayId, _ := result.GetString("prepay_id")
    param = dev.NewParam()
    param.Add("appId", appId)
    param.Add("timeStamp", time.Now().Unix())
    param.Add("nonceStr", "nonceStr")
    param.Add("package", "prepay_id="+prepayId)
    param.Add("signType", "MD5")
    //use to evoke wechat pay 
    sign := param.Sign("MD5")


    //download bill
    param = dev.NewParam()
    param.Add("nonce_str", "yourNonceStr")
    param.Add("bill_date", "yourDate")
    param.Add("bill_type", "ALL")
    param.Add("tar_type", "GZIP")
    err := client.DownloadBill(param, "./bill")
    if err != nil {
        handleErr(err)
    }
    

    //get phone for mini program user
    result, err := client.GetUserPhoneForMini("code", "encryptedData", "iv")
    if err != nil {
    	handleErr(err)
    }
    var phone string
    if countryCode := result.Get("countryCode"); countryCode != nil && countryCode.(string) == "86" {
    	purePhone := result.Get("purePhoneNumber")
    	phone = purePhone.(string)
    } else {
    	phoneNumber := result.Get("phoneNumber")
    	phone = phoneNumber.(string)
    }
    fmt.Printf("user phone is %s\n", phone)
}

package main

import (
    "fmt"
    "net/http"
    
    dev "github.com/pyihe/wechat-sdk"
)

func main() {
    var appId, mchId, apiKey, apiSecret string
    
    client := dev.NewPayer(dev.WithAppId(appId), dev.WithMchId(mchId), dev.WithApiKey(apiKey), dev.WithSecret(apiSecret))
    
    //handle refund notify
    http.HandleFunc("/refund_notify", func(writer http.ResponseWriter, request *http.Request) {
        defer request.Body.Close()
        result, err := client.RefundNotify(request.Body)
        if err != nil {
            handleErr(err)
        }
        fmt.Printf("RefundNotify Result = %v\n", result.Data())
    })
    http.ListenAndServe(":8810", nil)
}

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrParams    = errors.New("param is empty")
	ErrTradeType = errors.New("need trade_type")
	ErrOpenId    = errors.New("JSAPI need openid")
	ErrCheckSign = errors.New("check sign fail")
	ErrAppId     = errors.New("different appid")
)

Functions

func ParseXMLReader

func ParseXMLReader(reader io.Reader) resultMap

XML to Param(遍历生成)

func WithApiKey

func WithApiKey(key string) option

func WithApiV3Key added in v0.2.0

func WithApiV3Key(v3Key string) option

func WithAppId

func WithAppId(appId string) option

func WithMchId

func WithMchId(mchId string) option

func WithSecret

func WithSecret(secret string) option

Types

type Param

type Param map[string]interface{}

用于装载外部传入的请求参数

func NewParam

func NewParam() Param

func (Param) Add

func (p Param) Add(key string, value interface{})

func (Param) Del

func (p Param) Del(key string)

func (Param) Get

func (p Param) Get(key string) interface{}

func (Param) MarshalXML

func (p Param) MarshalXML() (reader io.Reader, err error)

func (Param) RangeIn added in v0.3.0

func (p Param) RangeIn(fn func(key string) bool) error

func (Param) Sign

func (p Param) Sign(signType string) string

func (Param) SortKey

func (p Param) SortKey() (keys []string)

type ResultParam

type ResultParam interface {
	//获取整型数据, 如支付/退款金额
	GetInt64(key string, base int) (value int64, err error)
	//获取字符串数据, 如订单号
	GetString(key string) (value string, err error)
	//
	Data() map[string]string
}

type WePayer

type WePayer interface {
	//支付相关
	//统一下单
	UnifiedOrder(param Param) (ResultParam, error)
	//扫码下单
	UnifiedMicro(param Param) (ResultParam, error)
	//撤销订单
	ReverseOrder(param Param, p12CertPath string) (ResultParam, error)
	//查询订单
	UnifiedQuery(param Param) (ResultParam, error)
	//关闭订单
	CloseOrder(param Param) (ResultParam, error)
	//退款
	RefundOrder(param Param, p12CertPath string) (ResultParam, error)
	//退款查询
	RefundQuery(param Param) (ResultParam, error)
	//解析退款通知, 结果将不会返回req_info
	RefundNotify(body io.Reader) (ResultParam, error)
	//下单对账单
	DownloadBill(param Param, fileSavePath string) error
	//下载资金账单
	DownloadFundFlow(param Param, p12CertPath string, fileSavePath string) error
	//拉取订单评论数据
	DownloadComment(param Param, p12CertPath string, fileSavePath string) (offset uint64, err error)
	//交易保障
	Report(param Param) error

	//
	//企业付款
	//付款到零钱
	Transfers(param Param, p12CertPath string) (ResultParam, error)
	//查询企业付款到零钱
	TransfersQuery(param Param, p12CertPath string) (ResultParam, error)
	//从微信获取RSA加密的公钥
	GetPublicKey(p12CertPath string, targetPath string) error
	//TODO 待验证 企业付款到银行卡
	TransferBank(param Param, p12CertPath string, publicKeyPath string) (ResultParam, error)
	//TODO 待验证 查询企业付款到银行卡
	TransferBankQuery(param Param, p12CertPath string) (ResultParam, error)

	//分账相关
	//申请单次分账or多次分账
	ProfitSharing(param Param, p12CertPath string, multiTag bool) (ResultParam, error)
	//查询申请分账的结果
	QueryProfitSharing(param Param, p12CertPath string) (ResultParam, error)
	//添加分账接收方
	AddProfitSharingReceiver(param Param) (ResultParam, error)
	//删除分账接收方
	RemoveProfitSharingReceiver(param Param) (ResultParam, error)
	//完结分账
	FinishProfitSharing(param Param, p12CertPath string) (ResultParam, error)
	//分账回退
	ReturnProfitSharing(param Param, p12CertPath string) (ResultParam, error)
	//回退结果查询
	QueryProfitSharingReturn(param Param) (ResultParam, error)
	//分账动帐通知(此处无视返回结果的层级关系,对需要的字段直接使用Get方法获取对应的结果)
	ProfitSharingNotify(body io.Reader) (ResultParam, error)

	//红包相关
	//发放红包
	SendRedPack(param Param, p12CertPath string) (ResultParam, error)
	//发放裂变红包
	SendGroupRedPack(param Param, p12CertPath string) (ResultParam, error)
	//查询红包发放记录
	GetRedPackRecords(param Param, p12CertPath string) (ResultParam, error)

	//小程序相关
	//获取授权access_token
	GetAccessTokenForMini() (Param, error) //获取小程序接口凭证,使用者自己保存token,过期重新获取
	//获取微信信息
	GetUserInfoForMini(code, encryptedData, ivData string) (Param, error)
	//获取微信手机号码
	GetUserPhoneForMini(code string, encryptedData string, ivData string) (Param, error)
	//获取session_key
	GetSessionKeyAndOpenId(code string) (Param, error)

	//公众号相关
	GetAppBaseAccessToken() (Param, error)
	GetAppOauthAccessToken(code string) (Param, error)
	RefreshOauthToken(refreshToken string) (Param, error)
	GetAppUserInfo(oauthToken, openId, lang string) (Param, error)
	CheckOauthToken(oauthToken, openId string) (bool, error)
}

func NewPayer

func NewPayer(options ...option) WePayer

不向微信发送接口请求report

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL