青柠檬檬哒|别再问用 Go 语言如何对接微信支付了:看看这个包
作为开发人员 , 微信生态我们不能无视 , 微信提供的开放能力 , 我们应该有所了解 。 微信支付作为重要的一部分 , 平时工作中可能难免会遇到 。 Go 作为一门新语言 , 微信支付没有提供 Go 的 SDK 。 你可以选择自己实现 , 也可以找第三方实现好的 。 对于第三方 , 即使不自己实现 , 看看别人怎么实现的 , 对自己也会有启发 。 今天就为大家推荐一个微信支付 Go SDK , 收藏以备不时之需吧 。
项目地址:https://github.com/pyihe/wechat-sdk 。
一、功能列表已经实现的功能如下 。
Mini Program(小程序)NameExplaincommentGetUserPhoneForMini小程序获取电话号码客户端调用微信接口获取加密信息时不能在回调中再次调用登陆接口, 否则会让session_key失效GetSessionKeyAndOpenId通过小程序授权code获取session_key和用户openidGetAccessTokenForMini小程序获取AccessTokenGetUserInfoForMini小程序获取用户基本信息
Official Accounts(公众号)【青柠檬檬哒|别再问用 Go 语言如何对接微信支付了:看看这个包】NameExplaincommentGetAppBaseAccessToken公众号开发获取基础接口调用Access_Token用于调用其他接口GetAppOauthAccessToken公众号开发通过code获取网页授权Access_Token此Access_Token用于拉取用户信息, code只能用一次RefreshOauthToken公众号开发刷新网页授权Access_TokenGetAppUserInfo公众号开发拉取用户信息返回结果参考微信文档[1]CheckOauthToken公众号开发校验网页授权Access_Token是否有效
WeChat Pay(微信支付)NameExplaincommentCloseOrder关闭订单DownloadBill下载对账单DownloadComment拉取订单评论DownloadFundFlow下载资金账单GetPublicKey获取RSA加密公钥RefundOrder申请退款RefundNotify解析微信退款回调内容, 主要是对req_info解密RefundQuery退款查询Report向微信发送接口调用结果的报告, 包括接口调用时间ReverseOrder撤销订单Transfers企业付款到用户零钱TransfersQuery查询企业付款到用户零钱的结果TransferBank企业付款到银行卡未测试TransferBankQuery查询企业付款到银行卡的结果未测试UnifiedMicro扫码下单如果需要传detail参数, 参数格式参照单品优惠活动detail字段列表说明[2]UnifiedOrder统一下单: H5/APP/MWEB/NATIVE返回给前端的唤起支付参数中, package = prepay_id=xxxxxxxUnifiedQuery下单结果查询
ProfitSharing(商户分账)NameExplaincommentProfitSharing申请分账(单次或多次)multiTag标志是否是多次分账QueryProfitSharing查询分账请求的结果非分账的结果 , 而是分账申请的结果AddProfitSharingReceiver添加分账接收方RemoveProfitSharingReceiver删除分账接受方FinishProfitSharing完结分账如果订单不需要(再)分账, 且剩余待分账金额不为0时, 调用本接口将剩余金额冻结给特约商户ReturnProfitSharing分账回退对已分账的订单进行退款时 , 先调用本接口将金额从分账接收方回退给商户(非异步, 同步回传回退结果)QueryProfitSharingReturn回退结果查询用于核实回退结果ProfitSharingNotify分账动帐通知分账或分账回退成功后, 微信会将结果发送给商户, 通知结果包含加密信息, 此处解密密钥为ApiV3密钥 。 接口返回结果中忽略层级关系 , 对于需要的字段直接使用Get方法获取值 。 通知url在商户平台配置 , 详情参加分账动帐通知[3]
RedPack(现金红包)NameExplaincommentSendRedPack发放现金红包SendGroupRedPack发放裂变红包GetRedPackRecords查询红包记录
注意:NewPayer() 必须传入所有需要使用的微信参数 , 使用过程中所有请求接口都不需要加入appid/mch_id/ApiKey/secret/sign/ApiV3Key参数
二、使用示例package mainimport ( "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 index=2
推荐阅读
- 艾希大人|竹内结子拍摄杂志封面 柠檬黄上衣青春活力
- 柠檬少年|早报:iPhone12磁吸充电壳曝光 发布会9月8日开
- 柠檬车评|你看好哪条狗?,哈弗大狗预售12.5万元起
- 青柠檬檬哒|无线电二厂虎啸,可做蓝牙音箱的功能机
- 以往车队|有怎样的变化?第三代哈弗H6实拍简评,柠檬平台孵化的H6
- 柠檬老师不点名|Dandy谈SSW解散真相:国外10倍工资谁会留?
- 梵高的穿衣经|时尚穿搭:短发萌妹驾驭“柠檬”色上衣,太可爱!
- 猫又柠檬|定妆照初次曝光,画面太美不敢看,65岁刘晓庆不服老再演少女
- 青柠檬檬哒|ORICO工业级USB3.0集线器 满足多种场景使用
- 青柠檬檬哒|360周鸿祎:强烈反对马斯克“脑机接口”的广泛应用