package recharge_phone_bill import ( "encoding/json" "errors" "git.rosy.net.cn/baseapi/utils" "net/http" ) // 充值类型 const ( ChargeTypeDefault = 0 //快充(默认) ChargeTypeAuto = 1 // 自动慢充 ChargeTypeManual = 2 // 手动慢充 ) // 产品编码 const ( FlowCodeY10Y100 = "Y10Y100" // Y10Y100 全国 全省 中国移动 100 FlowCodeY10Y200 = "Y10Y200" // Y10Y200 全国 全省 中国移动 200 FlowCodeD10Y50 = "D10Y50" // D10Y50 全国 全省 中国电信 50 FlowCodeD10Y100 = "D10Y100" // D10Y100 全国 全省 中国电信 100 FlowCodeD10Y200 = "D10Y200" // D10Y200 全国 全省 中国电信 200 FlowCodeL10Y50 = "L10Y50" // L10Y50 全国 全省 中国联通 50 FlowCodeL10Y100 = "L10Y100" // L10Y100 全国 全省 中国联通 100 FlowCodeL10Y200 = "L10Y200" // L10Y200 全国 全省 中国联通 200 ) const ( BaseUrl = "http://39.108.16.170/index.php/" // 基础访问路由 CreateOrder = "Api/Order/flow" // 话费充值 QueryOrder = "Api/Order/order_search" // 订单查询 QueryAccountBill = "Api/Order/balance_search" // 余额查询 ) type RechargePhoneBillBase struct { FlowCode string `json:"flowCode"` // 产品编码 Mobile string `json:"mobile"` // 手机号码 OrderNumber string `json:"orderNumber"` // 商户订单号 CallbackURL string `json:"callbackURL"` // 回调地址,不传不回调 ChargeType string `json:"chargeType"` // 充值类型 0 快充(默认) 1 自动慢充 2 手动慢充 } var FlowCode = map[string]bool{FlowCodeY10Y100: true, FlowCodeY10Y200: true, FlowCodeD10Y50: true, FlowCodeD10Y100: true, FlowCodeD10Y200: true, FlowCodeL10Y50: true, FlowCodeL10Y100: true, FlowCodeL10Y200: true} // RechargePhoneBill 话费充值接口 func (a *API) RechargePhoneBill(params *RechargePhoneBillBase) (string, error) { if !FlowCode[params.FlowCode] { return "", errors.New("不存在的充值类型") } data, err := a.AccessAPI(BaseUrl, CreateOrder, http.MethodPost, utils.Struct2MapByJson(params)) if err != nil { return "", err } if k, _ := data["code"].(json.Number).Int64(); k != 2000 { return "", errors.New(data["msg"].(string)) } return data["order_number"].(string), nil } type QueryOrderDetailRes struct { Code string `json:"code"` Msg string `json:"msg"` Data []QueryOrderDetailResList `json:"data"` } type QueryOrderDetailResList struct { OrderNumber string `json:"order_number"` // 平台订单号 UserOrdernum string `json:"user_ordernum"` // 商户订单号 OrderStatus string `json:"order_status"` // 状态:0:未提交,1:充值中,2:已充值,-1:失败 Mobile string `json:"mobile"` // 手机号码 Ctime string `json:"ctime"` // 时间戳 Voucher string `json:"voucher"` // 透传流水号 } // QueryOrderDetail 查询充值订单详情 func (a *API) QueryOrderDetail(orderNumber, userOrderNum string) ([]QueryOrderDetailResList, error) { params := make(map[string]interface{}, 0) if orderNumber == "" && userOrderNum == "" { return nil, errors.New("订单号不能为空") } if orderNumber != "" { params["order_number"] = orderNumber } else { params["user_ordernum"] = userOrderNum } data, err := a.AccessAPI(BaseUrl, QueryOrder, http.MethodPost, params) if err != nil { return nil, err } if k, _ := data["code"].(json.Number).Int64(); k != 2000 { return nil, errors.New(data["msg"].(string)) } var result []QueryOrderDetailResList if err := json.Unmarshal([]byte(utils.Interface2String(data["data"])), &result); err != nil { return nil, err } return result, nil } // QueryAccountBill 余额查询 func (a *API) QueryAccountBill() (string, error) { data, err := a.AccessAPI(BaseUrl, QueryAccountBill, http.MethodPost, map[string]interface{}{}) if err != nil { return "", err } if k, _ := data["code"].(json.Number).Int64(); k != 2000 { return "", errors.New(data["msg"].(string)) } return data["balance"].(string), nil }