提交 cb32610bfee1ea78b3e0d80221553b844a716e76

作者 chenang
2 个父辈 b62d8fcf d6a80879

Merge branch 'dev' into 'master'

Dev



See merge request !1
  1 +.idea/
  2 +*/.DS_Store
  3 +*.pem
  1 +
  2 +# 命令行
  3 +### 查看参数
  4 +```
  5 +go run main.go -h
  6 +```
  7 +### 命令行运行
  8 +```
  9 +go run main.go -key fbb416bfd0a242419e6528f2 -iv 0f6ce46636264d66 -ip http://47.110.250.177:20000/ -bussiness_code AUTHORIZE -ptCode 730088256896503808 -reqBody '{"response_type":"code","client_id":"432437055486697481","redirect_uri":"https://dev3.workai.com.cn/wso-workai?state=socialwork_strait_certification_list","state":"client_credential","scope":"global_access:end_user","user_mobile":"13301169757","user_name":"sasl_dispose","callback":"","certification":"0","ptcode":"730088256896503808","path_type":"","path":""}' -privateKeyPath /Users/macbook/go/src/socialwork-sdk/main/private.pem -publicKeyPath /Users/macbook/go/src/socialwork-sdk/main/public.pem -errFilePath /Users/macbook/go/src/socialwork-sdk/main/error.txt -resultFilePath /Users/macbook/go/src/socialwork-sdk/main/result.txt
  10 +```
@@ -32,8 +32,6 @@ func aes_CBC_Encrypt(data []byte, key, iv []byte) (string, error) { @@ -32,8 +32,6 @@ func aes_CBC_Encrypt(data []byte, key, iv []byte) (string, error) {
32 return "", err 32 return "", err
33 } 33 }
34 origData := padding([]byte(data), block.BlockSize()) 34 origData := padding([]byte(data), block.BlockSize())
35 - println("block ", block.BlockSize())  
36 - println("block2 ", len(iv))  
37 blockMode := cipher.NewCBCEncrypter(block, iv) 35 blockMode := cipher.NewCBCEncrypter(block, iv)
38 crypted := make([]byte, len(origData)) 36 crypted := make([]byte, len(origData))
39 blockMode.CryptBlocks(crypted, origData) 37 blockMode.CryptBlocks(crypted, origData)
  1 +package socialwork_sdk
  2 +
  3 +import (
  4 + "encoding/json"
  5 + "gitlab.workai.com.cn/chenang/socialwork-sdk/model"
  6 + "testing"
  7 +)
  8 +
  9 +const (
  10 + KEY = "fbb416bfd0a242419e6528f2"
  11 + IV = "0f6ce46636264d66"
  12 + //客户私钥
  13 + PRIVATEKEY = `-----BEGIN PRIVATE KEY-----
  14 +MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAL+HIjm9wYlMx5dR
  15 +hCGw9Uw5X1ZKPUfOvKXq/8mIuNVtH2ls6jz1fBlhoSHrYMjxY5t7EPSRZzOLeqGI
  16 +7FKbwlHPLAC4cN3njho8TE4Ao7EqipG7L81qHL6Wll/NrziP67+dDROG0ozscmNh
  17 +kq0JFxIkxQn3aKGbeEdJbLcLRRM7AgMBAAECgYEAn72Rah89v8nt3eL7FS6GKGDh
  18 +hxK8MZvX83oghHIn1roArOlOJDGKo5Ct16B9RJsvvInUBmcPcAow6XFNyUhntGnk
  19 +evnBZSPz8SJlwGMTTz/P4ebQURrcup5UejQzmBOSXrIXsrW4Ty0AdvnwM1OB/lmz
  20 +tQZyU3xMzK6QbXJkCgECQQDqWeR9/gBwWZLkZBPQASxWbb7NKwyCNN7clzMZv6MN
  21 +ea8sR7Zp6cNfPtfcVVTeHRX/sXRhB7inRyLi/ec3dSJBAkEA0TiGYiTv1l5prTCC
  22 +PK6lyShDK9SR8ZBcSxO5KsttFeOs3f9l2uU0ddd8fAuLJPm2xjd3RAbnH9dAfEC1
  23 +GXoeewJBAJ/aB0iFnIkGIHNXbEhCtJqTq0VJavPZ2nZ/UCTtGexUJ0+97shZ4qEy
  24 +PY2WSxhioKHTyn1xBdxcYoiRBklGxcECQAqDOZVi3744vjyajGC6MdBauo1QQAkQ
  25 +ROLs2cgBsrh/2SbKd3a5P5qQOkwNVG+GMJ3jGZYMdr6N1UqpAbCHB1MCQH1aSvf2
  26 ++CXW9fbkUz+qyjIWLN0pDyI+uh+zAHRRs9sL5UVOLfyU03W3120bUL7aekrbynP8
  27 +1+ihe8QolWZgvUk=
  28 +-----END PRIVATE KEY-----`
  29 + //平台公钥
  30 + PUBLICKEY = `-----BEGIN PUBLIC KEY-----
  31 +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHk0VRd3+CqwUHA2jC4dzrqe7/
  32 +pjX8BTbC7T7DnzAGO7iN09kf2abbzudLTM+xbOKr2wSTLkhffBhycZ4zlf3PuVu/
  33 +KmUhzAS0v+cvRYEBdiD+ckC1i80KaGPsiSvKSgJIxEEo1urgsrGJBGP0uBMM50Bm
  34 +3YZBKCNST3LB1JNSeQIDAQAB
  35 +-----END PUBLIC KEY-----`
  36 + IP = "http://47.110.250.177:20000/"
  37 + //IP = "http://127.0.0.1:51393/"
  38 + PTCODE = "730088256896503808"
  39 + STR = `{"response_type":"code","client_id":"432437055486697481","redirect_uri":"https://dev3.workai.com.cn/wso-workai?state=socialwork_strait_certification_list","state":"client_credential","scope":"global_access:end_user","user_mobile":"13301169757","user_name":"sasl_dispose","callback":"","certification":"0","ptcode":"730088256896503808","path_type":"","path":""}`
  40 +
  41 + V1DATA = "Wxy8h961GO12QmdOdwOYaUZdy6P+o67Olid6YbbjP+SiZNKYofmbQ33eyixsWXIP33sLIrrUrYZ/BNd1+iC8Bng9itBpIcJEfO7fJX9+8Sgp+5hORLESdPRoiyIjeQMX1JKpBk0Uiu7eSsxRRepi33oMi1+580LtFa91lc44PAwnrAEPoTZbEpPQQQmNPrGM0DzmZRUxEIT/SajlwoNg34DvKrGpsb2g8GZ7wUR8GuTOYUg2odF8WjTWNj2GWuzCUw8WPN8FGXdgTzRMn0glivn5SizGmJn0oOJZxo4JRG0Q6h0hV3xi8nPtvwjyOdy0Wspjcd4jQny1jaOKCaPg/5CRLWdmQKLE9d7UhSyQoQ6jzNxEkd/r7vAbtuvRfwvB6zN7NKODjVc/kJf7qovou8u6k2xBGQ7C1CT8wULjqRy3bAYfJ4A5YYWIwtMPJ/l1swlEYsalq5M4Y1g5RjnX1auMczdhnTCOzNeXm2tTJSQ="
  42 + V1SIGN = "qTxPJ0t4vW6cMIMYw5vQukG+BnsUY0ku5S1h9TM/IHqJVa0VU5Q7FXxgy0I6T6R12jDZ37+R9RxeEBzO5Fc3rfMWQQfcfGfLgRsbhHSjF0In9T72QHKmzn2upArfCArNlDJh+tC3FvTG9BTMfztlLRlXmVJJ7oTqgJDcZ4m5IqU="
  43 +)
  44 +
  45 +var client *OrderClient
  46 +
  47 +func init() {
  48 + client = NewOrderClient(KEY, IV, PRIVATEKEY, PUBLICKEY, IP,PTCODE)
  49 +}
  50 +
  51 +func TestCheckParams(t *testing.T) {
  52 + b := `{"response_type":"code","client_id":"432437055486697481","redirect_uri":"https://dev3.workai.com.cn/wso-workai?state=socialwork_strait_certification_list","state":"client_credential","scope":"global_access:end_user","user_mobile":"13301169757","user_name":"sasl_dispose","callback":"http://tjianke.tcl.com/wxapp.php/sdata/identNotice","certification":"0","ptcode":"638103470397722624","path_type":"PathType","path":"Path"}`
  53 + if err := checkParams("AUTHORIZE", b); err != nil {
  54 + t.Logf("AUTHORIZE err : %+v", err)
  55 + }
  56 +
  57 + b = `{"items":{"name":"新的测试订单","customer_name":"","service_contract_no":"新服务合同543534543","bill_month":1638288000,"payer_object_type":"customer","payer_object_name":"","electron_contract_template_name":"","settlement_org_id":"635981601368444928","has_auto_create":"oneself","payer_name":"","payer_mobile":"","provide_mode":"","callback":"http://47.110.250.177:20000/socialwork/v1/external/callbacktext"}}`
  58 + if err := checkParams("CREATEORDER", b); err != nil {
  59 + t.Logf("CREATEORDER err : %+v", err)
  60 + }
  61 +
  62 + b = `{"id":"728622438832672768","items":[{"user_name":"人员姓名","user_mobile":"13301189876","id_card_no":"110101199003077192","bank_name":"招商银行","bank_card":"621083011111111119","total_salary":"1000","comment":"任务成果备注","job_name":"任务名称","begin_time":1642576824,"end_time":1643527224,"job_type":"会务服务","work_place":"工作地址","salary_unit":"order","salary":"100.00","confirm_type":"oneself","open_account_bank":"开户行","open_account_place":"开户地","open_bank_no":"开户行号","industry_code":"","extra":"","bank_payment_id":"","work_load":"","interval_price":"","real_total_salary":""},{"user_name":"人员姓名1","user_mobile":"13301189877","id_card_no":"110101199003074151","bank_name":"招商银行","bank_card":"621083011111111119","total_salary":"2000","comment":"任务成果备注1","job_name":"任务名称1","begin_time":1642576824,"end_time":1643527224,"job_type":"会务服务","work_place":"工作地址1","salary_unit":"order","salary":"200.00","confirm_type":"oneself","open_account_bank":"开户行1","open_account_place":"开户地1","open_bank_no":"开户行号1","industry_code":"","extra":"","bank_payment_id":"","work_load":"","interval_price":"","real_total_salary":""}]}`
  63 + if err := checkParams("ADDFREEDOMEEMP", b); err != nil {
  64 + t.Logf("ADDFREEDOMEEMP err : %+v", err)
  65 + }
  66 +
  67 + b = `{"id":"690313836787404802","file_type":"id_card_front_image","content":"6ZmE5Lu25YaF5a65","trace_no":"dsdsds"}`
  68 + if err := checkParams("UPLOADATTACHMENT", b); err != nil {
  69 + t.Logf("UPLOADATTACHMENT err : %+v", err)
  70 + }
  71 +
  72 + b = `{"id":"695762134566440960","file_type":"id_card_front_image","url":"http://hbimg.b0.upaiyun.com/32f065b3afb3fb36b75a5cbc9034s051b1050e1e6b6e199-Ml6q9F_fw320","trace_no":"dsdsds"}`
  73 + if err := checkParams("UPLOADATTACHMENTBYURL", b); err != nil {
  74 + t.Logf("UPLOADATTACHMENTBYURL err : %+v", err)
  75 + }
  76 +
  77 + b = `{"id":"705537141886685184"}`
  78 + if err := checkParams("ORDERINFO", b); err != nil {
  79 + t.Logf("ORDERINFO err : %+v", err)
  80 + }
  81 +
  82 + b = `{"id":"719706386803462144"}`
  83 + if err := checkParams("FREEDOMEMOSTATUS", b); err != nil {
  84 + t.Logf("FREEDOMEMOSTATUS err : %+v", err)
  85 + }
  86 +
  87 + b = `{"id":"30207117494289"}`
  88 + if err := checkParams("SUBACCOUNTBALANCE", b); err != nil {
  89 + t.Logf("SUBACCOUNTBALANCE err : %+v", err)
  90 + }
  91 +
  92 + b = `{"order_id":"723262661785030656","detail_id":"723262661785030657","user_name":"杨舟","user_mobile":"12203987657","user_id_card":"42108719910802122743","bank_name":"中国建设银行","bank_card":"621733002230003638850","update_fields":["bank_name","bank_card"]}`
  93 + if err := checkParams("UPDATEORDERDETAIL", b); err != nil {
  94 + t.Logf("UPDATEORDERDETAIL err : %+v", err)
  95 + }
  96 +
  97 + b = `{"id":"700814624890556416"}`
  98 + if err := checkParams("EXISTRECEIPT", b); err != nil {
  99 + t.Logf("EXISTRECEIPT err : %+v", err)
  100 + }
  101 +
  102 + b = `{"file_id":[],"type":"pa","order_id":"700814624890556416"}`
  103 + if err := checkParams("DOWNLOADRECEIPT", b); err != nil {
  104 + t.Logf("DOWNLOADRECEIPT err : %+v", err)
  105 + }
  106 +
  107 + b = `{"id":"728622438832672768","bank":"银行民称","recharge_date":1639639779,"serial_no":"76547654765","setting_status":false,"pt_code":""}`
  108 + if err := checkParams("PAYORDER", b); err != nil {
  109 + t.Logf("PAYORDER err : %+v", err)
  110 + }
  111 +
  112 + b = `{"name":"测试的订单20220210","service_contract_no":"676573793673547776","bill_month":1644485537,"payer_object_type":"customer","settlement_org_id":"676432056892264448","payer_name":"","payer_mobile":"","provide_mode":"","details":[{"user_name":"覃超","user_mobile":"18320960031","id_card_no":"430723199002143210","bank_name":"招商银行","bank_card":"6226096804210467","total_salary":"4.94","comment":"","job_name":"佣金提现申请金额","begin_time":0,"end_time":0,"job_type":"","work_place":"","salary_unit":"单","salary":"","confirm_type":"","open_account_bank":"","open_account_place":"","open_bank_no":"","industry_code":"","extra":"","bank_payment_id":"","work_load":"","interval_price":"","real_total_salary":""}],"Callback":"","setting_status":false,"pt_code":""}`
  113 + if err := checkParams("PAYORDERV1", b); err != nil {
  114 + t.Logf("PAYORDERV1 err : %+v", err)
  115 + }
  116 +
  117 + b = `{"filter":{"mobile":"13301169755"}}`
  118 + if err := checkParams("USERINFO", b); err != nil {
  119 + t.Logf("USERINFO err : %+v", err)
  120 + }
  121 +
  122 + b = `{"user_id":"705485356060905472","mobile":"18881652932"}`
  123 + if err := checkParams("UPDATEMOBILE", b); err != nil {
  124 + t.Logf("UPDATEMOBILE err : %+v", err)
  125 + }
  126 +
  127 + b = `{"name":"聂顺成","mobile":"15017402918","id_num":"341322190709230027","id_card_back":"http://hrshare.oss-cn-shenzhen.aliyuncs.com/hrshare/2022/04/06/frontCard151211551394418626561.png","id_card_front":"http://hrshare.oss-cn-shenzhen.aliyuncs.com/hrshare/2022/04/06/backCard121511551394418626561.png","callback":"https://hrshare.tacll.com/prod-api/app/wxApp/spiritedCallback"}`
  128 + if err := checkParams("CREATEEMPLOYMENTPOOL", b); err != nil {
  129 + t.Logf("CREATEEMPLOYMENTPOOL err : %+v", err)
  130 + }
  131 +}
  132 +
  133 +func checkParams(businessCode, reqBody string) error {
  134 + switch businessCode {
  135 + case "AUTHORIZE":
  136 + var authorize model.Authorize
  137 + if err := json.Unmarshal([]byte(reqBody), &authorize); err != nil {
  138 + return err
  139 + }
  140 + return nil
  141 + case "CREATEORDER":
  142 + var createOrder model.CreateOrder
  143 + if err := json.Unmarshal([]byte(reqBody), &createOrder); err != nil {
  144 + return err
  145 + }
  146 + return nil
  147 + case "ADDFREEDOMEEMP":
  148 + var freedomEmps model.FreedomEmps
  149 + if err := json.Unmarshal([]byte(reqBody), &freedomEmps); err != nil {
  150 + return err
  151 + }
  152 + return nil
  153 + case "UPLOADATTACHMENT":
  154 + var uploadFreedomEmps model.UploadFreedomEmps
  155 + if err := json.Unmarshal([]byte(reqBody), &uploadFreedomEmps); err != nil {
  156 + return err
  157 + }
  158 + return nil
  159 + case "UPLOADATTACHMENTBYURL":
  160 + var uploadFreedomEmpsByUrl model.UploadFreedomEmpsByUrl
  161 + if err := json.Unmarshal([]byte(reqBody), &uploadFreedomEmpsByUrl); err != nil {
  162 + return err
  163 + }
  164 + return nil
  165 + case "ORDERINFO":
  166 + var simpleOrderInfo model.SimpleOrderInfo
  167 + if err := json.Unmarshal([]byte(reqBody), &simpleOrderInfo); err != nil {
  168 + return err
  169 + }
  170 + return nil
  171 + case "FREEDOMEMOSTATUS":
  172 + var freedomEmpStatus model.FreedomEmpStatus
  173 + if err := json.Unmarshal([]byte(reqBody), &freedomEmpStatus); err != nil {
  174 + return err
  175 + }
  176 + return nil
  177 + case "SUBACCOUNTBALANCE":
  178 + var subAccountBalance model.SubAccountBalance
  179 + if err := json.Unmarshal([]byte(reqBody), &subAccountBalance); err != nil {
  180 + return err
  181 + }
  182 + return nil
  183 + case "UPDATEORDERDETAIL":
  184 + var updateOrderDetail model.UpdateOrderDetail
  185 + if err := json.Unmarshal([]byte(reqBody), &updateOrderDetail); err != nil {
  186 + return err
  187 + }
  188 + return nil
  189 + case "EXISTRECEIPT":
  190 + var receipt model.Receipt
  191 + if err := json.Unmarshal([]byte(reqBody), &receipt); err != nil {
  192 + return err
  193 + }
  194 + return nil
  195 + case "DOWNLOADRECEIPT":
  196 + var downloadReceipt model.DownloadReceipt
  197 + if err := json.Unmarshal([]byte(reqBody), &downloadReceipt); err != nil {
  198 + return err
  199 + }
  200 + return nil
  201 + case "PAYORDER":
  202 + var payOrder model.PayOrder
  203 + if err := json.Unmarshal([]byte(reqBody), &payOrder); err != nil {
  204 + return err
  205 + }
  206 + return nil
  207 + case "USERINFO":
  208 + var getUserInfo model.GetUserInfo
  209 + if err := json.Unmarshal([]byte(reqBody), &getUserInfo); err != nil {
  210 + return err
  211 + }
  212 + return nil
  213 + case "PAYORDERV1":
  214 + var mergeCreateOrder model.MergeCreateOrder
  215 + if err := json.Unmarshal([]byte(reqBody), &mergeCreateOrder); err != nil {
  216 + return err
  217 + }
  218 + return nil
  219 + case "UPDATEMOBILE":
  220 + var updateMobile model.UpdateMobile
  221 + if err := json.Unmarshal([]byte(reqBody), &updateMobile); err != nil {
  222 + return err
  223 + }
  224 + return nil
  225 +
  226 + case "CREATEEMPLOYMENTPOOL":
  227 + var createEmploymentPool model.CreateEmploymentPool
  228 + if err := json.Unmarshal([]byte(reqBody), &createEmploymentPool); err != nil {
  229 + return err
  230 + }
  231 + return nil
  232 + }
  233 + return nil
  234 +}
  235 +
  236 +func TestEncryption(t *testing.T) {
  237 + data, sign, err := client.EncryptAndSign([]byte(STR))
  238 + if err != nil {
  239 + t.Logf("加密和签名错误 err : %+v", err)
  240 + }
  241 + if data != V1DATA {
  242 + t.Logf("加密数据与期望值不匹配 err : %+v", err)
  243 + }
  244 +
  245 + if sign != V1SIGN {
  246 + t.Logf("签名数据与期望值不匹配 err : %+v", err)
  247 + }
  248 +
  249 +}
  250 +
  251 +/*func TestDecryptAndVerySign(t *testing.T) {
  252 + by, err := client.DecryptAndVerySign(V1DATA, V1SIGN)
  253 + if err != nil {
  254 + t.Logf("解密错误 err : %+v", err)
  255 + }
  256 + if string(by) != STR {
  257 + t.Logf("加密数据与期望值不匹配 err : %+v", err)
  258 + }
  259 +
  260 +}*/
  261 +
  262 +func TestSendRequest(t *testing.T) {
  263 + by, err := client.SendRequest("AUTHORIZE", STR)
  264 + if err != nil {
  265 + t.Logf("解密错误 err : %+v", err)
  266 + }
  267 + t.Log(by)
  268 +
  269 +}
1 module gitlab.workai.com.cn/chenang/socialwork-sdk 1 module gitlab.workai.com.cn/chenang/socialwork-sdk
2 2
  3 +go 1.16
@@ -83,9 +83,6 @@ func makeHttpRequestV4(method, url string, headers map[string]string, entity map @@ -83,9 +83,6 @@ func makeHttpRequestV4(method, url string, headers map[string]string, entity map
83 Jar: jar, 83 Jar: jar,
84 } 84 }
85 } 85 }
86 - // client.Transport = tr  
87 -  
88 - fmt.Printf("xuht================Request: %+v\n", *req)  
89 res, err := client.Do(req) 86 res, err := client.Do(req)
90 if err != nil { 87 if err != nil {
91 fmt.Println("faild to do the request with error ", err) 88 fmt.Println("faild to do the request with error ", err)
  1 +package main
  2 +
  3 +import (
  4 + "bufio"
  5 + "crypto/rand"
  6 + "crypto/rsa"
  7 + "crypto/x509"
  8 + "encoding/pem"
  9 + "flag"
  10 + socialwork_sdk "gitlab.workai.com.cn/chenang/socialwork-sdk"
  11 + "io/ioutil"
  12 + "os"
  13 +)
  14 +
  15 +/*func init(){
  16 + var bits int
  17 + flag.IntVar(&bits, "b", 1024, "密钥长度,默认为1024位")
  18 + flag.Parse()
  19 +
  20 + if err := GenRsaKey(bits); err != nil {
  21 + log.Fatal("密钥文件生成失败!")
  22 + }
  23 + log.Println("密钥文件生成成功!")
  24 +}
  25 +*/
  26 +func main() {
  27 + var key, iv, privateKeyPath, publicKeyPath, ip, bussinessCode, ptCode, reqBody, errFilePath, resultFilePath string
  28 + flag.StringVar(&key, "key", "", "key,验证签名使用的key")
  29 + flag.StringVar(&iv, "iv", "", "iv,加密使用的偏移量")
  30 + flag.StringVar(&privateKeyPath, "privateKeyPath", "", "privateKeyPath,私钥文件所在位置(.pem文件)")
  31 + flag.StringVar(&publicKeyPath, "publicKeyPath", "", "publicKeyPath,平台公钥文件所在位置(.pem文件)")
  32 + flag.StringVar(&ip, "ip", "", "ip,访问地址,如:http://47.110.250.177:20000/")
  33 + flag.StringVar(&bussinessCode, "bussiness_code", "", "bussiness_code,访问接口的bussiness_code参数")
  34 + flag.StringVar(&ptCode, "ptCode", "", "ptCode,访问接口的ptcode参数")
  35 + flag.StringVar(&reqBody, "reqBody", "", "reqBody,需要加密的数据(json格式)")
  36 + flag.StringVar(&errFilePath, "errFilePath", "", "errFilePath,错误信息写入的文件地址")
  37 + flag.StringVar(&resultFilePath, "resultFilePath", "", "resultFilePath,返回资源写入的文件地址")
  38 + flag.Parse()
  39 + if key == "" || iv == "" || privateKeyPath == "" || publicKeyPath == "" || ip == "" || bussinessCode == "" || ptCode == "" || reqBody == "" || resultFilePath == "" || errFilePath == "" {
  40 + os.Exit(1)
  41 + }
  42 + var err error
  43 + var publicKey, privateKey []byte
  44 + var req string
  45 + var file, fd *os.File
  46 + fd, err = os.OpenFile(errFilePath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
  47 + if err != nil {
  48 + os.Exit(1)
  49 + }
  50 + defer fd.Close()
  51 + defer func() {
  52 + write := bufio.NewWriter(fd)
  53 + write.WriteString("命令行执行错误:" + err.Error() + "\r\n")
  54 + write.Flush()
  55 + }()
  56 +
  57 + publicKey, err = ioutil.ReadFile(publicKeyPath)
  58 + if err != nil {
  59 + return
  60 + }
  61 + privateKey, err = ioutil.ReadFile(privateKeyPath)
  62 + if err != nil {
  63 + return
  64 + }
  65 +
  66 + client := socialwork_sdk.NewOrderClient(key, iv, string(privateKey), string(publicKey), ip, ptCode)
  67 + req, err = client.SendRequest(bussinessCode, reqBody)
  68 + if err != nil {
  69 + return
  70 + } else {
  71 + file, err = os.Create(resultFilePath)
  72 + if err != nil {
  73 + return
  74 + }
  75 + defer file.Close()
  76 +
  77 + file.WriteString(req)
  78 + return
  79 + }
  80 +}
  81 +
  82 +func GenRsaKey(bits int) error {
  83 + // 生成私钥文件
  84 + privateKey, err := rsa.GenerateKey(rand.Reader, bits)
  85 + if err != nil {
  86 + return err
  87 + }
  88 + derStream := x509.MarshalPKCS1PrivateKey(privateKey)
  89 + block := &pem.Block{
  90 + Type: "私钥",
  91 + Bytes: derStream,
  92 + }
  93 + file, err := os.Create("private.pem")
  94 + if err != nil {
  95 + return err
  96 + }
  97 + err = pem.Encode(file, block)
  98 + if err != nil {
  99 + return err
  100 + }
  101 + // 生成公钥文件
  102 + publicKey := &privateKey.PublicKey
  103 + derPkix, err := x509.MarshalPKIXPublicKey(publicKey)
  104 + if err != nil {
  105 + return err
  106 + }
  107 + block = &pem.Block{
  108 + Type: "公钥",
  109 + Bytes: derPkix,
  110 + }
  111 + file, err = os.Create("public.pem")
  112 + if err != nil {
  113 + return err
  114 + }
  115 + err = pem.Encode(file, block)
  116 + if err != nil {
  117 + return err
  118 + }
  119 + return nil
  120 +}
  1 +package model
  2 +
  3 +type SubAccountBalance struct {
  4 + SubAccountNo string `json:"sub_account_no"`
  5 +}
  6 +
  7 +type DownloadReceipt struct {
  8 + FileId []string `json:"file_id"`
  9 + Type string `json:"type"`
  10 + OrderId string `json:"order_id"`
  11 +}
  1 +package model
  2 +
  3 +type Authorize struct {
  4 + ResponseType string `json:"response_type"`
  5 + ClientId string `json:"client_id"`
  6 + RedirectUri string `json:"redirect_uri"`
  7 + State string `json:"state"`
  8 + Scope string `json:"scope"`
  9 + UserMobile string `json:"user_mobile"`
  10 + UserName string `json:"user_name"`
  11 + Callback string `json:"callback"`
  12 + Certification string `json:"certification"`
  13 + Ptcode string `json:"ptcode"`
  14 + PathType string `json:"path_type"`
  15 + Path string `json:"path"`
  16 +}
  17 +
  18 +type Receipt struct {
  19 + Id string `json:"id"`
  20 +}
  1 +package model
  2 +
  3 +type CreateEmploymentPool struct {
  4 + Name string `json:"name"`
  5 + Mobile string `json:"mobile"`
  6 + IdNum string `json:"id_num"`
  7 + IdCardBack string `json:"id_card_back"`
  8 + IdCardFront string `json:"id_card_front"`
  9 + Callback string `json:"callback"`
  10 +}
  1 +package model
  2 +
  3 +type FreedomEmps struct {
  4 + Id string `json:"id"`
  5 + Items []*FreedomEmp `json:"items"`
  6 +}
  7 +
  8 +type FreedomEmp struct {
  9 + UserName string `json:"user_name"`
  10 + UserMobile string `json:"user_mobile"`
  11 + IdCardNo string `json:"id_card_no"`
  12 + BankName string `json:"bank_name"`
  13 + BankCard string `json:"bank_card"`
  14 + TotalSalary string `json:"total_salary"`
  15 + Comment string `json:"comment"`
  16 + JobName string `json:"job_name"`
  17 + BeginTime int64 `json:"begin_time"`
  18 + EndTime int64 `json:"end_time"`
  19 + JobType string `json:"job_type"`
  20 + WorkPlace string `json:"work_place"`
  21 + SalaryUnit string `json:"salary_unit"`
  22 + Salary string `json:"salary"`
  23 + ConfirmType string `json:"confirm_type"`
  24 + OpenAccountBank string `json:"open_account_bank"`
  25 + OpenAccountPlace string `json:"open_account_place"`
  26 + OpenBankNo string `json:"open_bank_no"`
  27 + IndustryCode string `json:"industry_code"`
  28 + Extra string `json:"extra"`
  29 + BankPaymentId string `json:"bank_payment_id"`
  30 + WorkLoad string `json:"work_load"`
  31 + IntervalPrice string `json:"interval_price"`
  32 + RealTotalSalary string `json:"real_total_salary"`
  33 +}
  34 +
  35 +
  36 +type UploadFreedomEmps struct {
  37 + Id string `json:"id"`
  38 + FileType string `json:"file_type"`
  39 + Content string `json:"content"`
  40 + TraceNo string `json:"trace_no"`
  41 +}
  42 +
  43 +type UploadFreedomEmpsByUrl struct {
  44 + Id string `json:"id"`
  45 + FileType string `json:"file_type"`
  46 + Url string `json:"url"`
  47 + TraceNo string `json:"trace_no"`
  48 +}
  49 +
  50 +type FreedomEmpStatus struct {
  51 + Id string `json:"id"`
  52 +}
  53 +
  54 +type UpdateOrderDetail struct {
  55 + OrderId string `json:"order_id"`
  56 + DetailId string `json:"detail_id"`
  57 + UserName string `json:"user_name"`
  58 + UserMobile string `json:"user_mobile"`
  59 + UserIdCard string `json:"user_id_card"`
  60 + BankName string `json:"bank_name"`
  61 + BankCard string `json:"bank_card"`
  62 + UpdateFields []string `json:"update_fields"`
  63 +}
  1 +package model
  2 +
  3 +type CreateOrder struct {
  4 + Items *ExternalCreateOrder `json:"items,omitempty"`
  5 +}
  6 +
  7 +type ExternalCreateOrder struct {
  8 + Name string `json:"name"`
  9 + CustomerName string `json:"customer_name"`
  10 + ServiceContractNo string `json:"service_contract_no"`
  11 + BillMonth int64 `json:"bill_month"`
  12 + PayerObjectType string `json:"payer_object_type"`
  13 + PayerObjectName string `json:"payer_object_name"`
  14 + ElectronContractTemplateName string `json:"electron_contract_template_name"`
  15 + SettlementOrgId string `json:"settlement_org_id"`
  16 + HasAutoCreate string `json:"has_auto_create"`
  17 + PayerName string `json:"payer_name"`
  18 + PayerMobile string `json:"payer_mobile"`
  19 + ProvideMode string `json:"provide_mode"`
  20 + Callback string `json:"callback"`
  21 +}
  22 +
  23 +type SimpleOrderInfo struct {
  24 + Id string `json:"id"`
  25 +}
  26 +
  27 +type PayOrder struct {
  28 + Id string `json:"id"`
  29 + Bank string `json:"bank"`
  30 + RechargeDate int64 `json:"recharge_date"`
  31 + SerialNo string `json:"serial_no"`
  32 + SettingStatus bool `json:"setting_status"`
  33 + PtCode string `json:"pt_code"`
  34 +}
  35 +
  36 +type MergeCreateOrder struct {
  37 + Name string `json:"name"`
  38 + ServiceContractNo string `json:"service_contract_no"`
  39 + BillMonth int64 `json:"bill_month"`
  40 + PayerObjectType string `json:"payer_object_type"`
  41 + SettlementOrgId string `json:"settlement_org_id"`
  42 + PayerName string `json:"payer_name"`
  43 + PayerMobile string `json:"payer_mobile"`
  44 + ProvideMode string `json:"provide_mode"`
  45 + Details []*FreedomEmp `json:"details"`
  46 + Callback string `son:"callback"`
  47 + SettingStatus bool `json:"setting_status"`
  48 + PtCode string `json:"pt_code"`
  49 +}
@@ -4,5 +4,7 @@ type OrderModel struct { @@ -4,5 +4,7 @@ type OrderModel struct {
4 Data string `json:"data"` 4 Data string `json:"data"`
5 Sign string `json:"sign"` 5 Sign string `json:"sign"`
6 PtCode string `json:"ptcode"` 6 PtCode string `json:"ptcode"`
7 - BusinessCode string `json:"business_code"` 7 + BusinessCode string `json:"bussiness_code"`
  8 +
8 } 9 }
  10 +
  1 +package model
  2 +
  3 +type GetUserInfo struct {
  4 + Filter map[string]string `json:"filter"`
  5 +}
  6 +
  7 +type UpdateMobile struct {
  8 + UserId string `json:"user_id"`
  9 + Mobile string `json:"mobile"`
  10 +}
@@ -21,13 +21,14 @@ func HelloWorld() { @@ -21,13 +21,14 @@ func HelloWorld() {
21 fmt.Println("欢迎使用小爱,socialwork-sdk") 21 fmt.Println("欢迎使用小爱,socialwork-sdk")
22 } 22 }
23 23
24 -func NewOrderClient(key, iv, customerPrivateKey, publicKey, ip string) *OrderClient { 24 +func NewOrderClient(key, iv, customerPrivateKey, publicKey, ip, ptCode string) *OrderClient {
25 return &OrderClient{ 25 return &OrderClient{
26 Key: key, 26 Key: key,
27 IV: iv, 27 IV: iv,
28 PublicKey: publicKey, 28 PublicKey: publicKey,
29 CustomerPrivateKey: customerPrivateKey, 29 CustomerPrivateKey: customerPrivateKey,
30 IP: ip, 30 IP: ip,
  31 + PtCode: ptCode,
31 } 32 }
32 } 33 }
33 34
@@ -79,7 +80,6 @@ func (o *OrderClient) SendRequest(businessCode, reqBody string) (string, error) @@ -79,7 +80,6 @@ func (o *OrderClient) SendRequest(businessCode, reqBody string) (string, error)
79 PtCode: o.PtCode, 80 PtCode: o.PtCode,
80 BusinessCode: businessCode, 81 BusinessCode: businessCode,
81 } 82 }
82 -  
83 _orderModel, err := json.Marshal(orderModel) 83 _orderModel, err := json.Marshal(orderModel)
84 if err != nil { 84 if err != nil {
85 return "", err 85 return "", err
@@ -99,5 +99,104 @@ func (o *OrderClient) SendRequest(businessCode, reqBody string) (string, error) @@ -99,5 +99,104 @@ func (o *OrderClient) SendRequest(businessCode, reqBody string) (string, error)
99 } 99 }
100 100
101 func (o *OrderClient) checkParams(businessCode, reqBody string) error { 101 func (o *OrderClient) checkParams(businessCode, reqBody string) error {
  102 + switch businessCode {
  103 + case "AUTHORIZE":
  104 + var authorize model.Authorize
  105 + if err := json.Unmarshal([]byte(reqBody), &authorize); err != nil {
  106 + return err
  107 + }
  108 + return nil
  109 + case "CREATEORDER":
  110 + var createOrder model.CreateOrder
  111 + if err := json.Unmarshal([]byte(reqBody), &createOrder); err != nil {
  112 + return err
  113 + }
  114 + return nil
  115 + case "ADDFREEDOMEEMP":
  116 + var freedomEmps model.FreedomEmps
  117 + if err := json.Unmarshal([]byte(reqBody), &freedomEmps); err != nil {
  118 + return err
  119 + }
  120 + return nil
  121 + case "UPLOADATTACHMENT":
  122 + var uploadFreedomEmps model.UploadFreedomEmps
  123 + if err := json.Unmarshal([]byte(reqBody), &uploadFreedomEmps); err != nil {
  124 + return err
  125 + }
  126 + return nil
  127 + case "UPLOADATTACHMENTBYURL":
  128 + var uploadFreedomEmpsByUrl model.UploadFreedomEmpsByUrl
  129 + if err := json.Unmarshal([]byte(reqBody), &uploadFreedomEmpsByUrl); err != nil {
  130 + return err
  131 + }
  132 + return nil
  133 + case "ORDERINFO":
  134 + var simpleOrderInfo model.SimpleOrderInfo
  135 + if err := json.Unmarshal([]byte(reqBody), &simpleOrderInfo); err != nil {
  136 + return err
  137 + }
  138 + return nil
  139 + case "FREEDOMEMOSTATUS":
  140 + var freedomEmpStatus model.FreedomEmpStatus
  141 + if err := json.Unmarshal([]byte(reqBody), &freedomEmpStatus); err != nil {
  142 + return err
  143 + }
  144 + return nil
  145 + case "SUBACCOUNTBALANCE":
  146 + var subAccountBalance model.SubAccountBalance
  147 + if err := json.Unmarshal([]byte(reqBody), &subAccountBalance); err != nil {
  148 + return err
  149 + }
  150 + return nil
  151 + case "UPDATEORDERDETAIL":
  152 + var updateOrderDetail model.UpdateOrderDetail
  153 + if err := json.Unmarshal([]byte(reqBody), &updateOrderDetail); err != nil {
  154 + return err
  155 + }
  156 + return nil
  157 + case "EXISTRECEIPT":
  158 + var receipt model.Receipt
  159 + if err := json.Unmarshal([]byte(reqBody), &receipt); err != nil {
  160 + return err
  161 + }
  162 + return nil
  163 + case "DOWNLOADRECEIPT":
  164 + var downloadReceipt model.DownloadReceipt
  165 + if err := json.Unmarshal([]byte(reqBody), &downloadReceipt); err != nil {
  166 + return err
  167 + }
  168 + return nil
  169 + case "PAYORDER":
  170 + var payOrder model.PayOrder
  171 + if err := json.Unmarshal([]byte(reqBody), &payOrder); err != nil {
  172 + return err
  173 + }
  174 + return nil
  175 + case "USERINFO":
  176 + var getUserInfo model.GetUserInfo
  177 + if err := json.Unmarshal([]byte(reqBody), &getUserInfo); err != nil {
  178 + return err
  179 + }
  180 + return nil
  181 + case "PAYORDERV1":
  182 + var mergeCreateOrder model.MergeCreateOrder
  183 + if err := json.Unmarshal([]byte(reqBody), &mergeCreateOrder); err != nil {
  184 + return err
  185 + }
  186 + return nil
  187 + case "UPDATEMOBILE":
  188 + var updateMobile model.UpdateMobile
  189 + if err := json.Unmarshal([]byte(reqBody), &updateMobile); err != nil {
  190 + return err
  191 + }
  192 + return nil
  193 +
  194 + case "CREATEEMPLOYMENTPOOL":
  195 + var createEmploymentPool model.CreateEmploymentPool
  196 + if err := json.Unmarshal([]byte(reqBody), &createEmploymentPool); err != nil {
  197 + return err
  198 + }
  199 + return nil
  200 + }
102 return nil 201 return nil
103 } 202 }
注册登录 后发表评论