Skip to content

markity/payjs

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Payjs SDK for Go

当前实现

  • 扫码支付
  • 付款码支付
  • 查询订单
  • 关闭订单
  • 撤销订单
  • 退款
  • 人脸支付
  • 分账支付
  • JSAPI支付
  • 收银台支付

获取模块

> go get github.com/markity/payjs

基本使用

扫码支付(native)

使用场景: 网站生成二维码, 用户扫码支付后回调, 网站执行相关逻辑

package main

import (
	"fmt"
	"github.com/markity/payjs"
)

func main() {
	mch := payjs.NewMch("your-mchid", "your-mchkey")
	// 说明: ReturnCode不为1 或 签名错误均视为error, 此模块所有方法均自动校验签名
	nativePayResp, err := mch.NativePay(payjs.NativePayInfo{TotalFee: 10, OutTradeNo: "2020_1_27_001", Body: "支付测试"})
	if err != nil {
		fmt.Printf("失败: %v\n", err)
		return
	}

	fmt.Println(nativePayResp.ReturnCode)
	fmt.Println(nativePayResp.ReturnMsg)
	fmt.Println(nativePayResp.PayjsOrderID)
	fmt.Println(nativePayResp.Qrcode)
	fmt.Println(nativePayResp.CodeURL)
	fmt.Println(nativePayResp.Sign)
}

付款码支付(micropay)

使用场景: 付款者打开微信首付款, 商家使用扫码枪或其他设备扫描用户auth_code, 程序拿到auth_code可调起支付

package main

import (
	"fmt"
	"github.com/markity/payjs"
)

func main() {
	mch := payjs.NewMch("your-mchid", "your-mchkey")
	microPayResp, err := mch.MicroPay(payjs.MicroPayInfo{TotalFee: 10, OutTradeNo: "2020_1_28_001", AuthCode: "付款者微信收付款的auth-code"})
	if err != nil {
		fmt.Printf("失败: %v\n", err)
		return
	}

	fmt.Println(microPayResp.ReturnCode)
	fmt.Println(microPayResp.ReturnMsg)
	fmt.Println(microPayResp.PayjsOrderID)
	fmt.Println(microPayResp.Sign)
}

注意1: 付款码支付不支持回调, 需自行调用CheckOrder检查是否完成支付

注意2: 不论请求成功失败, microPayResp.ReturnCode恒为0, 成功与否取决于microPayResp.ReturnMsg是否为需要用户输入支付密码

查询订单(check)

使用场景: 用户发起支付后,可通过本接口发起订单查询来确认订单状态

package main

import (
	"fmt"
	"github.com/markity/payjs"
)

func main() {
	mch := payjs.NewMch("your-mchid", "your-mchkey")
	checkResp, err := mch.CheckOrder(payjs.CheckOrderInfo{PayjsOrderID: "order-id"})
	if err != nil {
		fmt.Printf("失败: %v\n", err)
		return
	}

	fmt.Println(checkResp.ReturnCode)
	fmt.Println(checkResp.OutTradeNo)
	fmt.Println(checkResp.TransactionID)
	fmt.Println(checkResp.Status)
	fmt.Println(checkResp.OpenID)
	fmt.Println(checkResp.TotalFee)
	fmt.Println(checkResp.PaidTime)
	fmt.Println(checkResp.Attach)
	fmt.Println(checkResp.Sign)
}

注意: 一个支付成功的订单, 如果接收到check查询, 代表已经信息成功送达.此时如果异步通知尚未执行或正在执行, 则会中断执行, 此订单不再回调

关闭订单(close)

package main

import (
	"fmt"
	"github.com/markity/payjs"
)

func main() {
	mch := payjs.NewMch("your-mchid", "your-mchkey")
	closeResp, err := mch.CloseOrder(payjs.CloseOrderInfo{PayjsOrderID: "order-id"})
	if err != nil {
		fmt.Printf("失败: %v\n", err)
		return
	}

	fmt.Println(closeResp.ReturnCode)
	fmt.Println(closeResp.ReturnMsg)
	fmt.Println(closeResp.Sign)
}

提醒: 仅能关闭30天以内的未支付订单, 订单发起后, 并非一定要关闭

撤销订单(reverse)

使用场景: 针对人脸支付和付款码支付的异常订单(例如无法查询或确定订单状态), 对订单进行撤销, 若订单已经支付, 则自动原路还款

package main

import (
	"fmt"
	"github.com/markity/payjs"
)

func main() {
	mch := payjs.NewMch("your-mchid", "your-mchkey")
	reverseRsep, err := mch.ReverseOrder(payjs.ReverseOrderInfo{PayjsOrderID: "order-id"})
	if err != nil {
		fmt.Printf("失败: %v\n", err)
		return
	}

	fmt.Println(reverseRsep.ReturnCode)
	fmt.Println(reverseRsep.ReturnMsg)
	fmt.Println(reverseRsep.ReturnCode)

}

注意: 撤销订单无法适用于正常订单, 只能应用于7天以内的异常订单: 何时使用?参见https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=5_4

退款(refund)

使用场景: 对于已经付款的订单, 可以退款, 资金自动原路返回

package main

import (
	"fmt"
	"github.com/markity/payjs"
)

func main() {
	mch := payjs.NewMch("your-mchid", "your-mchkey")
	refundResp, err := mch.Refund(payjs.RefundInfo{PayjsOrderID: "order-id"})
	if err != nil {
		fmt.Printf("失败: %v\n", err)
		return
	}

	fmt.Println(refundResp.ReturnCode)
	fmt.Println(refundResp.ReturnMsg)
	fmt.Println(refundResp.Sign)
}

注意: 若向已经退款的订单重复退款, return_code为1, 但无sign字段

Change logs

版本: v0.3.2
时间: 2020年2月7日
内容:
  Url统一改名URL
  Openid统一改名OpenID
版本: v0.3.1
时间: 2020年2月7日
内容:
  Native统一改名NativePay
  修正README中的错误
版本: v0.3
时间: 2020年1月31日
内容:
  移除丢弃响应中的不必要字段(原样返回的字段), 保留必要字段, 防止payjs接口频繁更新, 某些字段消失, 便于维护
  移除tool.go中打印出的调试信息
版本: v0.2.2
时间: 2020年1月30日
内容:
  优化签名校验算法, 可以适应于更为复杂的数据结构
  payjs.DEBUG由常量改为变量
版本: v0.2.1
时间: 2020年1月29日
内容:
  mch.Native改名mch.NativePay
  新增payjs.DEBUG配置, 开启后发送的json数据以及服务器响应的json数据将被输出
版本: v0.2
时间: 2020年1月28日
内容:
  修复订单重复退款响应的签名无法正常校验的bug
  实现了撤销订单, 付款码支付功能
版本: v0.1
时间: 2020年1月27日
内容:
  实现扫码支付, 查询订单, 关闭订单, 退款

About

Easy to use payjs sdk for golang

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages