package main import ( "io/ioutil" "net/http" "net/url" "fmt" "encoding/json" ) //---------------------------------- // 加油卡充值调用示例代码 - 聚合数据 // 在线接口文档:http://www.juhe.cn/docs/87 //---------------------------------- const APPKEY = "*******************" //您申请的APPKEY func main(){ //1.订单状态查询 Request1() //2.账户余额查询 Request2() //3.加油卡充值 Request3() } //1.订单状态查询 func Request1(){ //请求地址 juheURL :="http://op.juhe.cn/ofpay/sinopec/ordersta" //初始化参数 param:=url.Values{} //配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参 param.Set("orderid","") //商家订单号,8-32位字母数字组合 param.Set("key",APPKEY) //应用APPKEY(应用详细页查询) //发送请求 data,err:=Get(juheURL,param) if err!=nil{ fmt.Errorf("请求失败,错误信息:\r\n%v",err) }else{ var netReturn map[string]interface{} json.Unmarshal(data,&netReturn) if netReturn["error_code"].(float64)==0{ fmt.Printf("接口返回result字段是:\r\n%v",netReturn["result"]) } } } //2.账户余额查询 func Request2(){ //请求地址 juheURL :="http://op.juhe.cn/ofpay/sinopec/yue" //初始化参数 param:=url.Values{} //配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参 param.Set("timestamp","") //当前时间戳,如:1432788379 param.Set("key",APPKEY) //应用APPKEY(应用详细页查询) param.Set("sign","") //校验值,md5(OpenID+key+timestamp),OpenID在个人中心查询 //发送请求 data,err:=Get(juheURL,param) if err!=nil{ fmt.Errorf("请求失败,错误信息:\r\n%v",err) }else{ var netReturn map[string]interface{} json.Unmarshal(data,&netReturn) if netReturn["error_code"].(float64)==0{ fmt.Printf("接口返回result字段是:\r\n%v",netReturn["result"]) } } } //3.加油卡充值 func Request3(){ //请求地址 juheURL :="http://op.juhe.cn/ofpay/sinopec/onlineorder" //初始化参数 param:=url.Values{} //配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参 param.Set("proid","") //产品id:10000(中石化50元加油卡)[暂不支持]、10001(中石化100元加油卡)、10003(中石化500元加油卡)、10004(中石化1000元加油卡)、10007(中石化任意金额充值)[暂不支持]、10008(中石油任意金额充值) param.Set("cardnum","") //充值数量(产品id为10007、10008时为具体充值金额(整数),其余产品id请传固定值1);注:中石油任意冲(产品id:10008)暂时只支持100\200\500\1000 param.Set("orderid","") //商家订单号,8-32位字母数字组合 param.Set("game_userid","") //加油卡卡号,中石化:以100011开头的卡号、中石油:以9开头的卡号 param.Set("gasCardTel","") //持卡人手机号码,可以填写一个固定格式的手机号码,如:18900000000 param.Set("gasCardName","") //持卡人姓名 param.Set("chargeType","") //加油卡类型 (1:中石化、2:中石油;默认为1) param.Set("key",APPKEY) //应用APPKEY(应用详细页查询) param.Set("sign","") //校验值,md5(OpenID+key+proid+cardnum+game_userid+orderid),OpenID在个人中心查询 //发送请求 data,err:=Get(juheURL,param) if err!=nil{ fmt.Errorf("请求失败,错误信息:\r\n%v",err) }else{ var netReturn map[string]interface{} json.Unmarshal(data,&netReturn) if netReturn["error_code"].(float64)==0{ fmt.Printf("接口返回result字段是:\r\n%v",netReturn["result"]) } } } // get 网络请求 func Get(apiURL string,params url.Values)(rs[]byte ,err error){ var Url *url.URL Url,err=url.Parse(apiURL) if err!=nil{ fmt.Printf("解析url错误:\r\n%v",err) return nil,err } //如果参数中有中文参数,这个方法会进行URLEncode Url.RawQuery=params.Encode() resp,err:=http.Get(Url.String()) if err!=nil{ fmt.Println("err:",err) return nil,err } defer resp.Body.Close() return ioutil.ReadAll(resp.Body) } // post 网络请求 ,params 是url.Values类型 func Post(apiURL string, params url.Values)(rs[]byte,err error){ resp,err:=http.PostForm(apiURL, params) if err!=nil{ return nil ,err } defer resp.Body.Close() return ioutil.ReadAll(resp.Body) }