拉卡拉支付 Go SDK

news2025/2/26 5:59:33

最近有一个需求,需要用到拉卡拉的支付,然后秉着开源精神去网上找到了
github.com/go-pay/gopay 一个支付的库,等到我使用的时候却发现拉卡拉的实现是
url
国外的接口,😂😂😂。
无奈之下,只能自己动手来实现一个拉卡拉的Golang SDK。也就是github.com/ywanbing/pay 的诞生。

项目地址:https://github.com/ywanbing/pay

下面就是这个项目的介绍

功能介绍

  1. 拉卡拉支付的接口SDK,目前只会增加聚合平台的支付接口
  2. 采用泛型的方式进行接口封装

快速开始

该库采用泛型和一些新的特性,需要使用的 Go 版本需要不小于 1.22.4

安装

1、使用 Go Modules 管理你的项目

如果你的项目还不是使用 Go Modules 做依赖管理,在项目根目录下执行:

go mod init
2、无需 clone 仓库中的代码,直接在项目目录中执行:
go get -u github.com/ywanbing/pay

来添加依赖,完成 go.mod 修改与 SDK 下载。

发送支付订单创建

先初始化一个 lklpay.Client 实例,再向拉卡拉支付发送请求。

package main

import (
	"context"
	"time"

	"github.com/ywanbing/pay/lklpay"
	"github.com/ywanbing/pay/lklpay/common"
	"github.com/ywanbing/pay/lklpay/model"
)

var (
	Appid           = "OP00000003"
	SerialNo        = "00dfba8194c41b84cf"
	MerchantNo      = "822290059430BCY"
	TermNo          = "A9254710"
	SyncPublicKey   = `-----BEGIN CERTIFICATE----- ******* END CERTIFICATE-----`
	SyncPubicPath   = "" // 读取证书文件(如果没有配置 SyncPublicKey 那么就会读取文件)
	SignPrivateKey  = `-----BEGIN RSA PRIVATE KEY----- ******* END RSA PRIVATE KEY-----`
	SignPrivatePath = "" // 读取私钥文件(如果没有配置 SignPrivateKey 那么就会读取文件)
)

func main() {
	client := lklpay.New(lklpay.Config{
		Appid:           Appid,
		SerialNo:        SerialNo,
		MerchantNo:      MerchantNo,
		TermNo:          TermNo,
		SyncPublicKey:   SyncPublicKey,
		SignPrivateKey:  SignPrivateKey,
		SyncPubicPath:   "",
		SignPrivatePath: "",
	},
		lklpay.WithIsProd(true),     // 是否生产环境
		lklpay.WithNonceStrLen(12),  // 随机字符串长度
		lklpay.WithVerifyResp(true)) // 验证响应的签名
	// ... 还有一些其他的配置

	// resp *model.SpecialCreateRes
	resp, err := client.OrderSpecialCreate(context.Background(), model.SpecialCreateReq{
		OutOrderNo:           "123456789",
		MerchantNo:           MerchantNo,
		TotalAmount:          1,
		OrderEfficientTime:   common.FormatTime(time.Now().Add(time.Minute * 5)), // 提供时间的格式化
		OrderInfo:            "测试订单",
		SupportRefund:        1,
		CloseOrderAutoRefund: "1",
	})
	if err != nil {
		panic(err)
	}
	println(resp)
}


实现接口

  • 收银台订单创建 client.OrderSpecialCreate doc地址
  • 收银台订单查询 client.OrderQuery doc地址
  • 收银台订单通知 client.ParseOrderNotify doc地址
  • 收银台订单关单 client.OrderClose doc地址
  • 扫码-退款交易 client.Refund doc地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1918486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NFS服务器、autofs自动挂载综合实验

综合实验 现有主机 node01 和 node02,完成如下需求: 1、在 node01 主机上提供 DNS 和 WEB 服务 2、dns 服务提供本实验所有主机名解析 3、web服务提供 www.rhce.com 虚拟主机 4、该虚拟主机的documentroot目录在 /nfs/rhce 目录 5、该目录由 node02 主机…

【Linux网络】IP协议{初识/报头/分片/网段划分/子网掩码/私网公网IP/认识网络世界/路由表}

文章目录 1.入门了解2.认识报头3.认识网段4.路由跳转相关指令路由 该文诸多理解参考文章:好文! 1.入门了解 用户需求:将我的数据可靠的跨网络从A主机送到B主机 传输层TCP:由各种方法(流量控制/超时重传/滑动窗口/拥塞…

【IOS】React Native之HelloWorld

RN搭建开发环境 rvm 安装3.2.2 brew install node18 brew install watchman# 使用nrm工具切换淘宝源 npx nrm use taobao# 如果之后需要切换回官方源可使用 npx nrm use npmnpm install -g yarnbrew install cocoapodsnpm uninstall -g react-native-cli react-native-communi…

Ajax从零到实战

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

RK3568笔记三十三: helloworld 驱动测试

若该文为原创文章,转载请注明原文出处。 报着学习态度,接下来学习驱动是如何使用的,从简单的helloworld驱动学习起。 开始编写第一个驱动程序—helloworld 驱动。 一、环境 1、开发板:正点原子的ATK-DLRK3568 2、系统&#xf…

Spring源码二十二:Bean实例化流程五

上一篇Spring源码二十一:Bean实例化流程四,咱们主要分析里createBeanInstance方法Spring给我们提供给的FactoryMethod方法,举例说明了factoryMethod属性如何使用,同时简单讨论了具体实现逻辑。 这一篇咱们将进入反射实例化Bean&am…

JavaEE初阶-网络原理2

文章目录 前言一、TCP报头结构二、TCP的十个核心机制2.1 确认应答2.2 超时重传2.3 连接管理2.3.1 建立连接:三次握手2.3.2 断开连接:四次挥手. 2.4 滑动窗口2.5 流量控制2.6 拥塞控制2.7 延时应答2.8 捎带应答2.9 面向字节流2.10 异常情况2.11 补充 前言…

OpenCV漫水填充函数floodFill函数的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 功能描述 ffloodFill函数是OpenCV库中用于图像处理的一个功能,它用于填充与种子点颜色相近的连通区域。这个函数在很多场景下都非常有用&#x…

基于 BERT 的非结构化领域文本知识抽取

文章目录 题目摘要方法实验 题目 食品测试的大型语言模型 论文地址:https://arxiv.org/abs/2103.00728 摘要 随着知识图谱技术的发展和商业应用的普及,从各类非结构化领域文本中提取出知识图谱实体及关系数据的需求日益增加。这使得针对领域文本的自动化…

MySQL学习(9):多表查询

1.多表关系 1.1一对多 1.2多对多 1.3一对一 设置外键唯一,是为了让两张表的数据一一对应 2.多表查询 2.1多表查询案例 现有父表(dept)如下: 子表(emp)如下: 让子表的dept_id作为外键与主表的…

重要文件放u盘还是硬盘?硬盘和u盘哪个适合长期存储

在数字时代,我们每天都会处理大量的文件。其中,不乏一些对我们而言至关重要的文件,如家庭照片、工作文档、财务记录等。面对这些重要文件的存储问题,我们通常会面临:“重要文件放U盘还是硬盘”、“硬盘和U盘哪个适合长…

辐射神经场算法——Instant-NGP / Mipi-NeRF 360 / 3D Gaussian Splatting

辐射神经场算法——Instant-NGP / Mipi-NeRF 360 / 3D Gaussian Splatting 1. Instant-NGP1. MultiResolution Hash Encoding1.2 Accelerated Ray Marching1.3 实验结果 2. Mip-NeRF 3602.1 场景参数化2.2 在线蒸馏2.3 失真正则化2.4 实验结果 3. 3D Gaussian Splatting3.1 Dif…

盲人出行好帮手:蝙蝠避障让走路变简单

在一片无光的世界里,每一步都承载着探索与勇气。我是众多盲人中的一员,每天的出行不仅是从A点到B点的物理移动,更是一场心灵的征程。我的世界,虽然被剥夺了视觉的馈赠,却因科技的力量而变得宽广…

kibana连接elasticsearch(版本8.11.3)

前言 elasticsearch在8版本之后就出现了很大变化,由于kibana版本需要需elasticsearch进行版本对象,kibana连接方式也出现了很大变化。我在这里记录下自己的踩坑记录。 服务部署 本文中的服务都是在docker环境中部署的。其中elasticsearch版本和kibana版…

手机被删除的短信怎么恢复?3个专家级恢复指南,拯救你的短信

想象一下,你正在翻阅一本尘封已久的日记,突然,几页重要的篇章不见了。那种失落和焦虑,想必与失去手机短信的感觉不相上下。 手机短信作为一种传统的通讯方式,仍然承载着我们的许多重要回忆和关键信息。被删除的短信怎…

Java | Leetcode Java题解之第225题用队列实现栈

题目&#xff1a; 题解&#xff1a; class MyStack {Queue<Integer> queue;/** Initialize your data structure here. */public MyStack() {queue new LinkedList<Integer>();}/** Push element x onto stack. */public void push(int x) {int n queue.size();…

企业如何选择平滑替代传统的FTP系统呢?

面对现在数据量的激增和网络安全威胁的不断演变&#xff0c;许多传统企业在用传统的FTP系统都面对着许多的安全和传输问题&#xff0c;原系统已经逐步无法满足现代企业的需求&#xff0c;今天小编将深入细讨企业为什么需要替代FTP系统的原因&#xff0c;以及如何选择合适企业的…

昇思MindSpore学习笔记6-06计算机视觉--Vision Transormer图像分类

摘要&#xff1a; 记录MindSpore AI框架使用ViT模型在ImageNet图像数据分类上进行训练、验证、推理的过程和方法。包括环境准备、下载数据集、数据集加载、模型解析与构建、模型训练与推理等。 一、概念 1. ViT模型 Vision Transformer 自注意结构模型 Self-Attention Tran…

CSS3实现彩色变形爱心动画【附源码】

随着前端技术的发展&#xff0c;CSS3 为我们提供了丰富的动画效果&#xff0c;使得网页设计更加生动和有趣。今天&#xff0c;我们将探讨如何使用 CSS3 实现一个彩色变形爱心加载动画特效。这种动画不仅美观&#xff0c;而且可以应用于各种网页元素&#xff0c;比如加载指示器或…

【数据结构】线性表----队列详解

1. 队列的基本概念 话不多说&#xff0c;直接开始&#xff01; 队列是一种线性数据结构&#xff0c;同栈类似但又不同&#xff0c;遵循先进先出&#xff08;FIFO, First In First Out&#xff09;的原则。换句话说&#xff0c;最先进入队列的元素会最先被移除。这样的特点使得…