Files
baseapi/platformapi/lakala/lakala_incoming.go
2025-11-21 09:09:09 +08:00

421 lines
12 KiB
Go

package lakala
import (
"encoding/base64"
"encoding/json"
"fmt"
"git.rosy.net.cn/baseapi/utils"
"net/http"
)
// MerchantIncoming 商户进件接口
func (a *API) MerchantIncoming(incoming *MerchantIncomingReq) (string, string, error) {
data := utils.Struct2Map(incoming, "", false)
result, err := a.AccessAPI2(BaseProdUrl, IncomingAction, http.MethodPost, "", data)
if err != nil {
return "", "", err
}
return result["merchantNo"].(string), result["status"].(string), nil
}
// GetMerchantInfo 获取商户详细信息
func (a *API) GetMerchantInfo(customerNo string) (*MerchantObj, error) {
parameters, _ := json.Marshal(map[string]string{"customerNo": customerNo})
encryptParam, err := EncryptByPrivateKey(parameters, PrivateKeyBegin)
if err != nil {
return nil, err
}
result, err := a.AccessAPI2(BaseProdChangeUrl, GetMerchantInfo, http.MethodPost, "", map[string]interface{}{"data": encryptParam})
if err != nil {
return nil, err
}
if result["code"].(string) != Success {
return nil, fmt.Errorf(result["message"].(string))
}
decryptData := result["data"].(string)
base64DecryData, _ := base64.StdEncoding.DecodeString(decryptData)
resultData, err := DecryptByPublicKey(base64DecryData, PublicKeyBegin)
if err != nil {
return nil, err
}
merchant := &MerchantObj{}
if err = json.Unmarshal(resultData, merchant); err != nil {
return nil, err
}
return merchant, nil
}
// GetTerminalInfo 获取终端信息
func (a *API) GetTerminalInfo(posSn string) (*TerminalInfo, error) {
parameters, _ := json.Marshal(map[string]string{"posSn": posSn})
encryptParam, err := EncryptByPrivateKey(parameters, PrivateKeyBegin)
if err != nil {
return nil, err
}
result, err := a.AccessAPI2(BaseProdChangeUrl, GetTerminalInfo, http.MethodPost, "", map[string]interface{}{"data": encryptParam})
if err != nil {
return nil, err
}
if result["code"].(string) != Success {
return nil, fmt.Errorf(result["message"].(string))
}
decryptData := result["data"].(string)
base64DecryData, _ := base64.StdEncoding.DecodeString(decryptData)
resultData, err := DecryptByPublicKey(base64DecryData, PublicKeyBegin)
if err != nil {
return nil, err
}
merchant := &TerminalInfo{}
if err = json.Unmarshal(resultData, merchant); err != nil {
return nil, err
}
return merchant, nil
}
// GetOrganizationCode 获取城市组织代码 parentCode = 1 查所有,城市code看看和我们系统一致不
func (a *API) GetOrganizationCode(parentCode string) ([]*OrganizationList, error) {
result, err := a.AccessAPI(BaseProdUrl, OrganizationAction, http.MethodGet, parentCode, nil)
if err != nil {
return nil, err
}
if result[ResultKey] != nil {
byteBank, err := json.Marshal(result[ResultKey])
if err != nil {
return nil, err
}
bankList := make([]*OrganizationList, 0, 0)
if err = json.Unmarshal(byteBank, &bankList); err != nil {
return nil, err
}
return bankList, err
}
return nil, fmt.Errorf("接口[%s],未查询到数据", OrganizationAction)
}
// GetBankList 银行列表查询
func (a *API) GetBankList(areaCode, bankName string) ([]*BankListResult, error) {
param := map[string]interface{}{
"areaCode": areaCode,
}
if bankName != "" {
param["bankName"] = bankName
}
result, err := a.AccessAPI(BaseProdUrl, BankList, http.MethodGet, "", param)
if err != nil {
return nil, err
}
if result[ResultKey] != nil {
byteBank, err := json.Marshal(result[ResultKey])
if err != nil {
return nil, err
}
bankList := make([]*BankListResult, 0, 0)
if err = json.Unmarshal(byteBank, &bankList); err != nil {
return nil, err
}
return bankList, err
}
return nil, fmt.Errorf("接口[%s],未查询到数据", BankList)
}
// GetMerchantMcc 商户类别查询(获取小类)
func (a *API) GetMerchantMcc(businessScene string, parentCode string) (data []*BusinessResult, err error) {
result := make([]*BusinessResult, 0, 0)
retVal := map[string]interface{}{}
if parentCode != "" { // 获取小类
retVal, err = a.AccessAPI(BaseProdUrl, MerchantMcc, http.MethodGet, parentCode, nil)
if err != nil {
return nil, err
}
} else {
retVal, err = a.AccessAPI(BaseProdUrl, MerchantMcc, http.MethodGet, "", map[string]interface{}{"businessScene": businessScene})
if err != nil {
return nil, err
}
}
if retVal[ResultKey] != nil {
byteBank, err := json.Marshal(retVal[ResultKey])
if err != nil {
return nil, err
}
if err = json.Unmarshal(byteBank, &result); err != nil {
return nil, err
}
return result, err
}
return nil, err
}
// MerchantFeeQuery 商户变更-商户费率查询 customerNo内部商户编号
func (a *API) MerchantFeeQuery(customerNo string, productCode string) (*MerchantFeeResp, error) {
if customerNo == "" {
return nil, fmt.Errorf("customerNo 不能为空")
}
param := map[string]interface{}{}
if productCode != "" {
param["productCode"] = productCode
}
result, err := a.AccessAPI(BaseProdChangeUrl, UpdateFeeQuery, http.MethodGet, customerNo, param)
if err != nil {
return nil, err
}
data := &MerchantFeeResp{}
if err = utils.Map2StructByJson(result, data, false); err != nil {
return nil, err
}
return data, err
}
// MerchantFeeChange 商户费率信息变更
func (a *API) MerchantFeeChange(param *FeeChangeReq, customerNo string) (int64, string, error) {
if customerNo == "" {
return 0, "", fmt.Errorf("商户ID不能为空")
}
mapParam := utils.Struct2Map(param, "", false)
result, err := a.AccessAPI2(BaseProdChangeUrl, UpdateFeeQuery, http.MethodPost, customerNo, mapParam)
if err != nil {
return 0, "", err
}
data := &CahngePublic{}
if err = utils.Map2StructByJson(result, data, false); err != nil {
return 0, "", err
}
return data.ReviewRelatedId, data.Message, nil
}
// UpdateSettleInfo 修改用户结算信息(当param为空时,是查询,不为空时是变更)
func (a *API) UpdateSettleInfo(customerNo string, param *UpdateSettleInfoReq) (*CahngePublic, *UpdateSettleInfoReq, error) {
if customerNo == "" {
return nil, nil, fmt.Errorf("商户ID不能为空")
}
var mapParam map[string]interface{}
if param != nil {
mapParam = utils.Struct2Map(param, "", false)
}
if param != nil { // 变更
result, err := a.AccessAPI2(BaseProdChangeUrl, UpdateSettleChange, http.MethodPost, customerNo, mapParam)
if err != nil {
return nil, nil, err
}
data := &CahngePublic{}
if err = utils.Map2StructByJson(result, data, false); err != nil {
return nil, nil, err
}
return data, nil, err
} else { // 查询
result, err := a.AccessAPI2(BaseProdChangeUrl, UpdateSettleChange, http.MethodGet, customerNo, mapParam)
if err != nil {
return nil, nil, err
}
data := &UpdateSettleInfoReq{}
if err = utils.Map2StructByJson(result, data, false); err != nil {
return nil, nil, err
}
return nil, data, err
}
}
// UpdateBaseInfo 商户基本信息变更
func (a *API) UpdateBaseInfo(customerNo string, changeBaseMap *UpdateBaseInfoReq) (*CahngePublic, error) {
if customerNo == "" {
return nil, fmt.Errorf("商户ID不能为空")
}
newMap := utils.Struct2Map(changeBaseMap, "'", false)
base := utils.MergeMaps(newMap, map[string]interface{}{"customerNo": customerNo})
result, err := a.AccessAPI2(BaseProdChangeUrl, UpdateBaseChange, http.MethodPost, "", base)
if err != nil {
return nil, err
}
data := &CahngePublic{}
if err = utils.Map2StructByJson(result, data, false); err != nil {
return nil, err
}
return data, err
}
// QueryMerchantReviewStatus 查询变更门店审核状态
func (a *API) QueryMerchantReviewStatus(reviewRelatedId string) (string, string, error) {
result, err := a.AccessAPI(BaseProdQueryReviewStatus, QueryChangeReviewStatus, http.MethodGet, "", map[string]interface{}{"reviewRelatedId": reviewRelatedId})
if err != nil {
return "", "", err
}
reviewPass := ""
reviewResult := ""
if result["reviewPass"] != nil {
reviewPass = result["reviewPass"].(string)
}
if result["reviewResult"] != nil {
reviewResult = result["reviewResult"].(string)
}
return reviewPass, reviewResult, err
}
// CheckImgIsSupplement 查看是否补充照片
func (a *API) CheckImgIsSupplement(externalCustomerNo string) (*OpenCustomerExtImgVo, error) {
result, err := a.AccessAPI(BaseProdChangeUrl, CheckImgIsSupplement, http.MethodGet, externalCustomerNo, nil)
if err != nil {
return nil, err
}
imgSupplementResp := &ImgSupplementResp{}
if err = utils.Map2StructByJson(result, imgSupplementResp, false); err != nil {
return nil, err
}
if imgSupplementResp.Code != Success {
return nil, fmt.Errorf(imgSupplementResp.Message)
}
base64DecryData, _ := base64.StdEncoding.DecodeString(result["data"].(string))
resultData, err := DecryptByPublicKey(base64DecryData, PublicKeyBegin)
if err != nil {
return nil, err
}
openCustomerExtImgVo := &OpenCustomerExtImgVo{}
if err = json.Unmarshal(resultData, openCustomerExtImgVo); err != nil {
return nil, err
}
return openCustomerExtImgVo, nil
}
// ImgSupplement 照片补充
func (a *API) ImgSupplement(param *ImgSupplementReq) error {
result, err := a.AccessAPI(BaseProdChangeUrl, ImgIsSupplement, http.MethodPost, "", utils.Struct2Map(param, "", false))
imgSupplementResp := &ImgSupplementResp{}
if err = utils.Map2StructByJson(result, imgSupplementResp, false); err != nil {
return err
}
if imgSupplementResp.Code != "200" {
return fmt.Errorf(imgSupplementResp.Message)
}
return nil
}
// GetMerchantReportStatus 查看银联报备状态
func (a *API) GetMerchantReportStatus(orgCode, agentNo, externalCustomerNo string) (*OpenUnionpayMerchantVo, error) {
param := map[string]interface{}{
"orgCode": orgCode,
"agentNo": agentNo,
"externalCustomerNo": externalCustomerNo,
}
result, err := a.AccessAPI2(BaseProdChangeUrl, ReportStatus, http.MethodPost, "", param)
if err != nil {
return nil, err
}
imgSupplementResp := &ImgSupplementResp{}
if err = utils.Map2StructByJson(result, imgSupplementResp, false); err != nil {
return nil, err
}
if imgSupplementResp.Code != Success {
return nil, fmt.Errorf(imgSupplementResp.Message)
}
base64DecryData, _ := base64.StdEncoding.DecodeString(imgSupplementResp.Data)
resultData, err := DecryptByPublicKey(base64DecryData, PublicKeyBegin)
if err != nil {
return nil, err
}
openUnionpayMerchantVo := &OpenUnionpayMerchantVo{}
if err = json.Unmarshal(resultData, openUnionpayMerchantVo); err != nil {
return nil, err
}
return openUnionpayMerchantVo, err
}
// GetMerchantTerminal 获取终端报备信息
func (a *API) GetMerchantTerminal(orgCode, agentNo, externalCustomerNo, posSn string) (*OpenUnionpayTermVo, error) {
param := map[string]interface{}{
"orgCode": orgCode,
"agentNo": agentNo,
"externalCustomerNo": externalCustomerNo,
"posSn": posSn,
}
result, err := a.AccessAPI2(BaseProdChangeUrl, TerminalStatus, http.MethodPost, "", param)
if err != nil {
return nil, err
}
imgSupplementResp := &ImgSupplementResp{}
if err = utils.Map2StructByJson(result, imgSupplementResp, false); err != nil {
return nil, err
}
if imgSupplementResp.Code != "200" {
return nil, fmt.Errorf(imgSupplementResp.Message)
}
openUnionpayTermVo := &OpenUnionpayTermVo{}
if err = json.Unmarshal([]byte(imgSupplementResp.Data), openUnionpayTermVo); err != nil {
return nil, err
}
return openUnionpayTermVo, err
}
// SupplementBusinessLicense 变更营业执照
func (a *API) SupplementBusinessLicense(param *BusinessLicenseReq) (string, string, error) {
req := utils.Struct2Map(param, "", false)
result, err := a.AccessAPI2(BaseProdChangeUrl, SupplementBusinessLicense, http.MethodPost, "", req)
if err != nil {
return "", "", err
}
data := &FeeChangeResp{}
if err = utils.Map2StructByJson(result, data, false); err != nil {
return "", "", err
}
if data.StatusCodeValue != utils.Str2Int(BaseSuccess) {
return "", "", fmt.Errorf(data.StatusCode)
}
return utils.Int2Str(data.Body.ReviewRelatedId), data.Body.Message, err
}
// UnionPayMerInfo 银联商户信息共享联防机制查询
func (a *API) UnionPayMerInfo(larName, larIdcard string) (*DishonestPerson, error) {
result, err := a.AccessAPI(BaseProdChangeUrl, UnionPayMerInfo, http.MethodPost, "", map[string]interface{}{
"larName": larName,
"larIdcard": larIdcard,
})
if err != nil {
return nil, err
}
person := &DishonestPerson{}
if err = utils.Map2StructByJson(result, person, false); err != nil {
return nil, err
}
return person, nil
}