package main import ( "io/ioutil" "net/http" "net/url" "fmt" "encoding/json" ) //---------------------------------- // 手机话费充值调用示例代码 - 聚合数据 // 在线接口文档:http://www.juhe.cn/docs/85 //---------------------------------- const APPKEY = "*******************" //您申请的APPKEY func main(){ //1.账户余额查询 Request1() //2.订单状态查询 Request2() //4.状态回调配置 Request4() //5.检测手机号码是否能充值 Request5() //6.根据手机号和面值查询商品信息 Request6() //7.手机直充接口 Request7() } //1.账户余额查询 func Request1(){ //请求地址 juheURL :="http://op.juhe.cn/ofpay/mobile/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"]) } } } //2.订单状态查询 func Request2(){ //请求地址 juheURL :="http://op.juhe.cn/ofpay/mobile/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"]) } } } //4.状态回调配置 func Request4(){ //请求地址 juheURL :="充值接口测试完毕,联系在线客服进行回调配置" //初始化参数 param:=url.Values{} //配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参 //发送请求 data,err:=Post(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"]) } } } //5.检测手机号码是否能充值 func Request5(){ //请求地址 juheURL :="http://op.juhe.cn/ofpay/mobile/telcheck" //初始化参数 param:=url.Values{} //配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参 param.Set("phoneno","") //手机号码 param.Set("cardnum","") //充值金额,目前可选:5、10、20、30、50、100、300 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"]) } } } //6.根据手机号和面值查询商品信息 func Request6(){ //请求地址 juheURL :="http://op.juhe.cn/ofpay/mobile/telquery" //初始化参数 param:=url.Values{} //配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参 param.Set("phoneno","") //手机号码 param.Set("cardnum","") //充值金额,目前可选:5、10、20、30、50、100、300 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"]) } } } //7.手机直充接口 func Request7(){ //请求地址 juheURL :="http://op.juhe.cn/ofpay/mobile/onlineorder" //初始化参数 param:=url.Values{} //配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参 param.Set("phoneno","") //手机号码 param.Set("cardnum","") //充值金额,目前可选:5、10、20、30、50、100、300 param.Set("orderid","") //商家订单号,8-32位字母数字组合 param.Set("key",APPKEY) //应用APPKEY(应用详细页查询) param.Set("sign","") //校验值,md5(OpenID+key+phoneno+cardnum+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) }