intelligence_finance_v1-202.../intelligence_finance_v1/example_test.go

352 lines
9.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package intelligence_finance_v1
import (
"context"
"encoding/json"
"fmt"
"log"
"strconv"
"testing"
"time"
)
const (
ApiBaseURL = "https://bfl.jcsk100.com/webhook/"
tenantID = "142"
clientID = "webhook_lsxd"
clientSecret = "wNKmz2VrSTawWLG5CoYNP9HLbQ6I4Cei"
)
// ExampleNewClient 展示了如何创建SDK客户端
func ExampleNewClient() {
// 创建客户端
client := NewClient(
"https://api.example.com",
"your-tenant-id",
"dd-ai-table",
"your-client-secret",
WithTimeout(30*time.Second),
WithDebug(true),
)
_ = client
fmt.Println("Client created successfully")
}
// ExampleClient_CreateInvoice 展示了如何提交订单开票申请
func Test_ExampleClient_CreateInvoice(t *testing.T) {
client := NewClient(
ApiBaseURL,
tenantID,
clientID,
clientSecret,
WithDebug(true),
)
req := &CreateInvoiceRequest{
OrderID: "testOrder" + strconv.FormatInt(time.Now().Unix(), 10),
InvoiceType: 9, // 数电普票
Purchaser: "测试购买方有限公司",
TaxNum: "91110108MA12345678",
Phone: "13800138000",
Email: "",
Products: []InvoiceProduct{
{
ProductName: "办公用品",
RevenueCode: "1090515010000000000",
AmountIncludeTax: 1130.00,
Quantity: 10,
Unit: "个",
TaxRate: 0.13,
TaxSign: 1,
Discount: 0,
},
},
ApplyPerson: "张三",
Payee: "李四",
Reviewer: "王五",
}
resp, err := client.CreateInvoice(context.Background(), req)
if err != nil {
log.Fatalf("创建开票申请失败: %v", err)
}
fmt.Printf("开票状态: %d, 错误信息: %s\n", resp.Code, resp.Msg)
if resp.Data == "true" {
fmt.Printf("开票成功")
} else {
fmt.Printf("开票失败")
}
}
// ExampleClient_QueryInvoiceStatus 展示了如何查询开票状态
func Test_ExampleClient_QueryInvoiceStatus(t *testing.T) {
client := NewClient(
ApiBaseURL,
tenantID,
clientID,
clientSecret,
WithDebug(true),
)
req := &QueryInvoiceStatusRequest{
OrderID: "testOrder1787018268",
}
resp, err := client.QueryInvoiceStatus(context.Background(), req)
if err != nil {
log.Fatalf("查询开票状态失败: %v", err)
}
fmt.Printf("开票状态查询: %d, 错误信息: %s,当前状态:%s\n", resp.Code, resp.Msg, resp.Data.Message)
if resp.Data.InvoiceDateList != nil {
invoce, _ := json.Marshal(resp.Data.InvoiceDateList)
fmt.Printf(string(invoce))
}
}
// ExampleClient_CreatePayment 展示了如何创建付款单据
func ExampleClient_CreatePayment() {
client := NewClient(
"https://api.example.com",
"your-tenant-id",
"dd-ai-table",
"your-client-secret",
)
req := &CreatePaymentRequest{
Code: "PAY20240101001",
UserID: "user123",
Title: "采购付款-2024年1月",
Amount: "50000.00",
Supplier: &Supplier{
Name: "供应商A",
},
Department: &Department{
Name: "财务部",
},
Company: &Company{
Name: "XX科技有限公司",
},
PaymentDetailList: []PaymentDetail{
{
Amount: "50000.00",
Remark: "1月采购货款",
},
},
}
resp, err := client.CreatePayment(context.Background(), req)
if err != nil {
log.Fatalf("创建付款单据失败: %v", err)
}
fmt.Printf("付款单据编码: %s\n", resp.Code)
}
// ExampleHandlePaymentNotification 展示了如何处理支付完成通知
func ExampleHandlePaymentNotification() {
// 模拟平台回调的请求体符合NotificationRequest格式
notificationBody := `{
"bizType": "payment_notification",
"bizId": "instance_001",
"data": "{\"code\":\"PAY20240101001\",\"instanceId\":\"instance_001\",\"corpId\":\"dingXXXXXX\",\"paymentStatus\":\"SUCCESS\",\"paymentTime\":\"2024-01-15 10:30:00\",\"userId\":\"user123\",\"amount\":\"50000.00\",\"source\":\"openapi\"}"
}`
result, err := HandlePaymentNotification([]byte(notificationBody))
if err != nil {
log.Printf("处理通知失败: %v", err)
}
fmt.Printf("通知处理结果: %s\n", result)
// 实际业务中,可以在此处解析通知数据并执行后续操作
// 解析外层
var notificationReq NotificationRequest
json.Unmarshal([]byte(notificationBody), &notificationReq)
var paymentNotification PaymentNotification
json.Unmarshal([]byte(notificationReq.Data), &paymentNotification)
fmt.Printf("收到支付通知: 单据编码=%s, 支付状态=%s\n", paymentNotification.Code, paymentNotification.PaymentStatus)
}
// ExampleClient_QueryPaymentStatus 展示了如何查询支付状态
func ExampleClient_QueryPaymentStatus() {
client := NewClient(
"https://api.example.com",
"your-tenant-id",
"dd-ai-table",
"your-client-secret",
)
req := &QueryPaymentStatusRequest{
Code: "PAY20240101001",
UserID: "user123",
}
resp, err := client.QueryPaymentStatus(context.Background(), req)
if err != nil {
log.Fatalf("查询支付状态失败: %v", err)
}
fmt.Printf("支付状态: %s, 支付时间: %s\n", resp.PaymentStatus, resp.PaymentTime)
}
// ExampleClient_CreateSupplier 展示了如何创建供应商
func ExampleClient_CreateSupplier() {
client := NewClient(
"https://api.example.com",
"your-tenant-id",
"dd-ai-table",
"your-client-secret",
)
bizData := CreateSupplierBizData{
CorpID: "dingXXXXXX",
Creator: "user123",
SupplierInfo: &SupplierInfo{
Name: "测试供应商有限公司",
CorpID: "dingXXXXXX",
Creator: "user123",
UserDefineCode: "SUP-001",
ContactName: "张三",
ContactTelephone: "13800138000",
ContactEmail: "contact@supplier.com",
ContactAddress: "北京市朝阳区XX路XX号",
},
}
bizDataBytes, _ := json.Marshal(bizData)
req := &CreateSupplierRequest{
InvokeID: "invoke_001",
UserID: "user123",
Data: string(bizDataBytes),
BizType: "create_supplier",
}
resp, err := client.CreateSupplier(context.Background(), req)
if err != nil {
log.Fatalf("创建供应商失败: %v", err)
}
fmt.Printf("创建供应商响应: invokeId=%s, bizType=%s\n", resp.InvokeID, resp.BizType)
// 如果需要解析响应数据,可以进一步处理 resp.Data
var responseData CreateSupplierResponseData
if err := json.Unmarshal(resp.Data, &responseData); err == nil {
fmt.Printf("响应数据: success=%v, result=%s\n", responseData.Success, responseData.Result)
}
}
// ExampleClient_QuerySupplierByName 展示了如何根据名称查询供应商
func ExampleClient_QuerySupplierByName() {
client := NewClient(
"https://api.example.com",
"your-tenant-id",
"dd-ai-table",
"your-client-secret",
)
bizData := []QuerySupplierByNameBizData{
{
CorpID: "dingXXXXXX",
Name: "测试供应商有限公司",
},
}
bizDataBytes, _ := json.Marshal(bizData)
req := &QuerySupplierByNameRequest{
InvokeID: "invoke_002",
UserID: "user123",
Data: string(bizDataBytes),
BizType: "query_supplier_by_name",
}
resp, err := client.QuerySupplierByName(context.Background(), req)
if err != nil {
log.Fatalf("查询供应商失败: %v", err)
}
fmt.Printf("查询结果: success=%v, result=%s\n", resp.Success, resp.Result)
// 解析响应数据
var results []QuerySupplierByNameResult
if err := json.Unmarshal(resp.Data, &results); err == nil {
for _, r := range results {
fmt.Printf("供应商: %s, ID: %s\n", r.SupplierName, r.SupplierID)
}
}
}
// ExampleClient_UpdateSupplier 展示了如何更新供应商
func ExampleClient_UpdateSupplier() {
client := NewClient(
"https://api.example.com",
"your-tenant-id",
"dd-ai-table",
"your-client-secret",
)
bizData := UpdateSupplierBizData{
SupplierID: "SUP_XXXXX",
Name: "更新后的供应商名称",
CorpID: "dingXXXXXX",
UserID: "user123",
ContactName: "李四",
ContactTelephone: "13900139000",
ContactEmail: "new@supplier.com",
Description: "长期合作供应商",
}
bizDataBytes, _ := json.Marshal(bizData)
req := &UpdateSupplierRequest{
InvokeID: "invoke_003",
UserID: "user123",
Data: string(bizDataBytes),
BizType: "update_supplier",
}
resp, err := client.UpdateSupplier(context.Background(), req)
if err != nil {
log.Fatalf("更新供应商失败: %v", err)
}
fmt.Printf("更新供应商响应: invokeId=%s, bizType=%s\n", resp.InvokeID, resp.BizType)
}
// ExampleClient_QuerySupplierByUserDefineCode 展示了如何根据自定义编码查询供应商
func ExampleClient_QuerySupplierByUserDefineCode() {
client := NewClient(
"https://api.example.com",
"your-tenant-id",
"dd-ai-table",
"your-client-secret",
)
bizData := QuerySupplierByUserDefineCodeBizData{
CorpID: "dingXXXXXX",
UserDefineCode: "SUP-001",
}
bizDataBytes, _ := json.Marshal(bizData)
req := &QuerySupplierByUserDefineCodeRequest{
InvokeID: "invoke_004",
UserID: "user123",
Data: string(bizDataBytes),
BizType: "query_supplier_by_userDefineCode",
}
resp, err := client.QuerySupplierByUserDefineCode(context.Background(), req)
if err != nil {
log.Fatalf("查询供应商失败: %v", err)
}
fmt.Printf("查询供应商响应: invokeId=%s, bizType=%s\n", resp.InvokeID, resp.BizType)
// 解析响应数据
var responseData QuerySupplierByUserDefineCodeResponseData
if err := json.Unmarshal(resp.Data, &responseData); err == nil {
fmt.Printf("响应数据: success=%v\n", responseData.Success)
}
}