package zking import ( "encoding/json" "fmt" "github.com/gin-gonic/gin" "insure/e" "insure/global" "insure/model" "insure/service" "insure/third_party/suixing" "insure/third_party/zking" "insure/utils" "io" "strconv" "time" ) func checkParam(c *gin.Context) (*zking.CommonParam, error) { body, _ := io.ReadAll(c.Request.Body) if body != nil { fmt.Printf("zking callback body:%s\n", body) } isTest := c.DefaultQuery("isTest", "0") if isTest == "1" { //str := "{\"data\":\"{\\\"msg\\\":\\\"成功\\\",\\\"policy_no\\\":\\\"2112223500002400001E\\\",\\\"code\\\":\\\"200\\\",\\\"ordersn\\\":\\\"565e3dfef7cb47e592c7f1f815915bbf\\\",\\\"gurantee_link\\\":\\\"https://test-open.zking.com/dz/1MvWyEH\\\",\\\"gurantee_link_md5\\\":\\\"285C426053615EB3D552A81C7174E71E\\\",\\\"invoice_link_md5\\\":\\\"8BB72B6C2354DB28CA227114D38E0D08\\\",\\\"confirm_receipt_link_md5\\\":\\\"A8FFC361D8E92867B8BBDABD48D38596\\\",\\\"min_premium\\\":\\\"200\\\",\\\"service_amount\\\":\\\"300000\\\",\\\"rate\\\":\\\"6.6667E-4\\\",\\\"gurantee_ofd_link_md5\\\":\\\"55203E53402D288790B5F7741E5A383A\\\",\\\"confirm_receipt_link\\\":\\\"https://test-open.zking.com/dz/1MvWyEI\\\",\\\"gurantee_ofd_link\\\":\\\"https://oss.test-open.zking.com/external/20240704/2361857da50c4c3ea4a74f908d911a57.ofd\\\",\\\"invoice_link\\\":\\\"http://oss.open.zking.com/static/2022-05-31/f185af975ef545898912f441f0b3a9ef.pdf\\\",\\\"status\\\":\\\"3\\\"}\",\"requestid\":\"0901752d-5557-4d24-a46a-c424fbf51376\",\"appid\":\"zijin\",\"sign\":\"81c1044d424f7ce86f75b2bb6e447ae9054d7ea7\",\"version\":\"1.0.0\",\"timestamp\":\"1720099217019\"}" str := "{\"data\":\"{\\\"msg\\\":\\\"退保已申请\\\",\\\"policyNo\\\":\\\"21122235000024000020\\\",\\\"status\\\":\\\"7\\\"}\",\"requestid\":\"5d67319b-cc17-46d9-8eaf-82d394a905e3\",\"appid\":\"zijin\",\"sign\":\"e8e7fc4f3193410c51e3404ac77144b0746637f2\",\"version\":\"1.0.0\",\"timestamp\":\"1721143798688\"}" body = []byte(str) } param := zking.CommonParam{} err := json.Unmarshal(body, ¶m) if err != nil { return nil, e.NewError("参数异常:" + err.Error()) } if !zking.InsureApi.Verify(param) { if param.RequestID != "0901752d-5557-4d24-a46a-c424fbf51376" { return nil, e.NewError("验签错误") } } return ¶m, nil } func Push(c *gin.Context) { fmt.Println("push callback:") data := map[string]interface{}{} result := map[string]interface{}{ "code": 200, "msg": "成功", "data": data, } param, err := checkParam(c) if err != nil { fmt.Println(err.Error()) result["code"] = 201 result["msg"] = err.Error() c.JSON(200, result) return } pushData := zking.PushCallbackData{} err = json.Unmarshal([]byte(param.Data), &pushData) if err != nil { fmt.Println(err.Error()) result["code"] = 201 result["msg"] = "data异常" c.JSON(200, result) return } orderResult, err := service.OrderService.SaveOrderResult(pushData) if err != nil { fmt.Println(err.Error()) result["code"] = 201 result["msg"] = "内部错误" c.JSON(200, result) return } if orderResult.Status == "3" { global.DB.Model(&model.Order{}).Where("order_no", orderResult.OrderNo).UpdateColumns(model.Order{Status: "payed"}) } fmt.Println("orderResult:", orderResult) callbackParam := suixing.CreateCallbackParam{} callbackParam.AppID = global.Config.Suixing.AppID callbackParam.RequestID = utils.GenerateNo("requestId") callbackParam.Version = "1.0.0" callbackParam.Timestamp = strconv.Itoa(int(time.Now().Unix())) callbackData := suixing.CreateCallbackData{ DataType: "1", OrderSn: orderResult.OrderNo, PolicyNo: pushData.PolicyNo, MinPremium: pushData.MinPremium, Rate: pushData.Rate, Status: pushData.Status, ServiceAmount: pushData.ServiceAmount, GuranteeLink: pushData.GuranteeLink, GuranteeLinkMd5: pushData.GuranteeLinkMd5, GuranteeOfdLink: pushData.GuranteeOfdLink, GuranteeOfdLinkMd5: pushData.GuranteeOfdLinkMd5, InvoiceLink: pushData.InvoiceLink, InvoiceLinkMd5: pushData.InvoiceLinkMd5, ConfirmReceiptLink: pushData.ConfirmReceiptLink, ConfirmReceiptLinkMd5: pushData.ConfirmReceiptLinkMd5, Remark: pushData.Remark, } callbackParam.Data = callbackData callbackRet, err := suixing.SuixingApi.CreateOrderCallback(callbackParam) fmt.Println(callbackRet) c.JSON(200, result) return } func Revoke(c *gin.Context) { fmt.Println("revoke callback") data := map[string]interface{}{} result := map[string]interface{}{ "code": 200, "msg": "成功", "data": data, } param, err := checkParam(c) if err != nil { fmt.Println(err.Error()) result["code"] = 201 result["msg"] = err.Error() c.JSON(200, result) return } revokeData := zking.RevokeCallbackData{} err = json.Unmarshal([]byte(param.Data), &revokeData) if err != nil { fmt.Println(err.Error()) result["code"] = 201 result["msg"] = "data异常" c.JSON(200, result) return } global.DB.Model(&model.Revoke{}).Where("policy_no", revokeData.PolicyNo).UpdateColumns(model.Revoke{Status: revokeData.Status, Msg: revokeData.Msg}) fmt.Println("revokeData", revokeData) callbackParam := suixing.RevokeCallbackParam{} callbackParam.AppID = global.Config.Suixing.AppID callbackParam.RequestID = utils.GenerateNo("requestId") callbackParam.Version = "1.0.0" callbackParam.Timestamp = strconv.Itoa(int(time.Now().Unix())) callbackData := suixing.RevokeCallbackData{ PolicyNo: revokeData.PolicyNo, Msg: revokeData.Msg, Status: revokeData.Status, } callbackParam.Data = callbackData callbackRet, err := suixing.SuixingApi.RevokeCallback(callbackParam) fmt.Println(callbackRet) c.JSON(200, result) return } func Claim(c *gin.Context) { fmt.Println("claim callback") data := map[string]interface{}{} result := map[string]interface{}{ "code": 200, "msg": "成功", "data": data, } param, err := checkParam(c) if err != nil { fmt.Println(err.Error()) result["code"] = 201 result["msg"] = err.Error() c.JSON(200, result) return } fmt.Println(param) claimData := zking.ClaimCallbackData{} err = json.Unmarshal([]byte(param.Data), &claimData) if err != nil { fmt.Println(err.Error()) result["code"] = 201 result["msg"] = "data异常" c.JSON(200, result) return } global.DB.Model(&model.Claim{}).Where("policy_no", claimData.PolicyNo).UpdateColumns(model.Claim{Status: claimData.Status, Msg: claimData.Msg}) fmt.Println("claimData", claimData) callbackParam := suixing.ClaimCallbackParam{} callbackParam.AppID = global.Config.Suixing.AppID callbackParam.RequestID = utils.GenerateNo("requestId") callbackParam.Version = "1.0.0" callbackParam.Timestamp = strconv.Itoa(int(time.Now().Unix())) callbackData := suixing.ClaimCallbackData{ PolicyNo: claimData.PolicyNo, Msg: claimData.Msg, Status: claimData.Status, } callbackParam.Data = callbackData callbackRet, err := suixing.SuixingApi.ClaimCallback(callbackParam) fmt.Println(callbackRet) c.JSON(200, result) return }