-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathkyc.go
136 lines (117 loc) · 3.64 KB
/
kyc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package mango
import (
"encoding/base64"
"errors"
)
type DocumentType string
const (
IdentityProof DocumentType = "IDENTITY_PROOF"
RegistrationProof DocumentType = "REGISTRATION_PROOF"
ArticlesOfAssociation DocumentType = "ARTICLES_OF_ASSOCIATION"
ShareholderDeclaration DocumentType = "SHAREHOLDER_DECLARATION"
AddressProof DocumentType = "ADDRESS_PROOF"
)
type DocumentStatus string
const (
DocumentStatusCreated DocumentStatus = "CREATED"
DocumentStatusValidationAsked DocumentStatus = "VALIDATION_ASKED"
DocumentStatusValidated DocumentStatus = "VALIDATED"
DocumentStatusRefused DocumentStatus = "REFUSED"
)
type DocumentRefusedReasonType string
const (
DocumentRefusedReasonTypeUnreadable DocumentRefusedReasonType = "DOCUMENT_UNREADABLE"
DocumentRefusedReasonTypeNotAccepted DocumentRefusedReasonType = "DOCUMENT_NOT_ACCEPTED"
DocumentRefusedReasonTypeHasExpired DocumentRefusedReasonType = "DOCUMENT_HAS_EXPIRED"
DocumentRefusedReasonTypeIncomplete DocumentRefusedReasonType = "DOCUMENT_INCOMPLETE"
DocumentRefusedReasonTypeNotMatchUserData DocumentRefusedReasonType = "DOCUMENT_DO_NOT_MATCH_USER_DATA"
DocumentRefusedReasonTypeNotMatchAccountData DocumentRefusedReasonType = "DOCUMENT_DO_NOT_MATCH_ACCOUNT_DATA"
DocumentRefusedReasonTypeFalsified DocumentRefusedReasonType = "DOCUMENT_FALSIFIED"
DocumentRefusedReasonTypeUnderagePerson DocumentRefusedReasonType = "UNDERAGE PERSON"
DocumentRefusedReasonTypeSpecificCase DocumentRefusedReasonType = "SPECIFIC_CASE"
)
func (m *MangoPay) Document(id string) (*Document, error) {
any, err := m.anyRequest(new(Document), actionFetchKYCDocument, JsonObject{"Id": id})
if err != nil {
return nil, err
}
return any.(*Document), nil
}
func (m *MangoPay) NewDocument(user Consumer, docType DocumentType, tag string) (*Document, error) {
id := consumerId(user)
if id == "" {
return nil, errors.New("user has empty Id")
}
data := JsonObject{
"UserId": id,
"Type": docType,
}
if len(tag) > 0 {
data["Tag"] = tag
}
doc, err := m.anyRequest(new(Document), actionCreateKYCDocument, data)
if err != nil {
return nil, err
}
casted := doc.(*Document)
casted.service = m
return casted, nil
}
func (m *MangoPay) Documents(user Consumer) (DocumentList, error) {
data := JsonObject{}
action := actionFetchAllKYCDocuments
if user != nil {
id := consumerId(user)
if id == "" {
return nil, errors.New("user has empty Id")
}
data["UserId"] = id
action = actionFetchUserKYCDocuments
}
list, err := m.anyRequest(new(DocumentList), action, data)
if err != nil {
return nil, err
}
casted := *(list.(*DocumentList))
for _, doc := range casted {
doc.service = m
}
return casted, nil
}
type DocumentList []*Document
type Document struct {
ProcessIdent
UserId string
Status DocumentStatus
Type DocumentType
RefusedReasonMessage string
RefusedReasonType DocumentRefusedReasonType
service *MangoPay
}
func (d *Document) Submit(status DocumentStatus, tag string) error {
data := JsonObject{
"Id": d.Id,
"UserId": d.UserId,
"Status": status,
}
if len(tag) > 0 {
data["Tag"] = tag
}
doc, err := d.service.anyRequest(new(Document), actionSubmitKYCDocument, data)
if err != nil {
return err
}
casted := doc.(*Document)
casted.service = d.service
*d = *casted
return nil
}
func (d *Document) CreatePage(file []byte) error {
data := JsonObject{
"Id": d.Id,
"UserId": d.UserId,
"File": base64.StdEncoding.EncodeToString(file),
}
_, err := d.service.anyRequest(new(JsonObject), actionCreateKYCPage, data)
return err
}