登录
原创

基于JAVA的天聚人合油卡充值接口示例

专栏天聚人合TIANJURENHE.COM
发布于 2020-12-07 阅读 1232
  • Java
  • API
原创

前期准备

接口说明

  • 免费使用,根据会员等级不同,每日可调用次数不同,具体登录天聚人合官网查看
  • 话费API接口技术接入服务。为企业提供话费API接口,通过接口自由实现PC端、H5、APP等方式接入。
  • 其他更详细的接口使用信息,登录天聚人合官网查看,本文为简单使用示例,仅供参考

油卡----提交加油卡充值接口:

请求参数

名称 必填 类型 说明
proid String 产品id:10001(中石化100元加油卡)等
cardnum String 充值数量(产品id为10007、10008时为具体充值金额(整数),其余产品id请传固定值1
orderid String 用户自定义订单号,8-32位字母数字组合
game_userid String 加油卡卡号,中石化:以100011开头的19位卡号、中石油:以90开头的16位卡号
gasCardTel String 持卡人手机号码,可以填写一个固定格式的手机号码
gasCardName String 持卡人姓名
chargeType int 加油卡类型 (1:中石化、2:中石油;默认为1)
key String 在个人中心->我的数据,接口名称上方查看
sign String 校验值,md5( OpenID+key+proid+cardnum+game_userid+orderid)

代码示例

//MD5工具类
import java.security.MessageDigest;

public class MD5Util {

    public static String MD5(String s) {
        char[] hexDigits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

        try {
            byte[] e = s.getBytes();
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            mdInst.update(e);
            byte[] md = mdInst.digest();
            int j = md.length;
            char[] str = new char[j * 2];
            int k = 0;

            for (byte byte0 : md) {
                str[k++] = hexDigits[byte0 >>> 4 & 15];
                str[k++] = hexDigits[byte0 & 15];
            }

            return new String(str).toLowerCase();
        } catch (Exception var10) {
            var10.printStackTrace();
            return null;
        }
    }
}

//调用充值接口的主类
import com.alibaba.fastjson.JSONObject;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;
import java.text.MessageFormat;
import java.util.concurrent.TimeUnit;

public class tjrh_yk {
    private static OkHttpClient client;
    /**
     * 加油卡充值接口地址
     */
    private static final String apiUrl_recharge = "http://op.tianjurenhe.com/ofpay/sinopec/onlineorder";
    /**
     * 油卡充值接口参数格式
     */
    public static final String YK_RECHARGE_PARAM = "?proid={0}&cardnum={1}&orderid={2}&game_userid={3}&gasCardTel={4}&gasCardName={5}&chargeType={6}&key={7}&sign={8}";  

    private static final int TIME_OUT = 20;

    static {
        client = new OkHttpClient.Builder()
                .connectTimeout(TIME_OUT, TimeUnit.SECONDS)
                .readTimeout(TIME_OUT, TimeUnit.SECONDS)
                .writeTimeout(TIME_OUT, TimeUnit.SECONDS)
                .retryOnConnectionFailure(true)
                .build();
    }  
/**
     * 依据用户提供的请求为指定油卡直接充值
     * @param proid 需要充值的油卡的产品id
     * @param cardnum 充值金额,产品id为10007、10008时为具体充值金额(整数),其余产品id请传固定值1,目前可选:100\200\500\1000
     * @param orderId 商家订单号,8-32位字母数字组合,自定义
     * @param game_userid 加油卡卡号,中石化:以100011开头的19位卡号、中石油:以90开头的16位卡号
     * @param gasCardTel 持卡人手机号码,可以填写一个固定格式的手机号码
     * @param gasCardName 持卡人姓名
     * @param chargeType 加油卡类型 (1:中石化、2:中石油;默认为1)
     * @return 返回String结果
     * @throws Exception
     */
    public static void recharge(Integer proid, String cardnum, String orderId,String game_userid,String gasCardTel,
                                String gasCardName,Integer chargeType) throws IOException {
        //OpenID+key+proid+cardnum+game_userid+orderid
        String sign = MD5Util.MD5(openId + key + proid + cardnum + game_userid + orderId);
        //拼接地址与参数
        String url = apiUrl_recharge + MessageFormat.format(YK_RECHARGE_PARAM, String.valueOf(proid), cardnum, orderId, game_userid
                ,gasCardTel,gasCardName,String.valueOf(chargeType),key,sign);
        //创建request对象实例
        Request request = new Request.Builder().url(url).build();
        //获取请求response应答
        Response response = client.newCall(request).execute();
        if(response != null){
            //返回消息体的字符串
            JSONObject result = JSONObject.parseObject(response.body().string());
            if (result.getInteger("error_code") == 0) {
                // 订单提交成功,根据实际业务逻辑进行处理
            }else{
                // 提交返回码error_code非正常状态,依据官方文档错误码说明,进行逻辑处理
                // 比如:10014,系统异常 / 208516,重复的订单号 等,需要进行二次查询/人工确认处理,不要直接失败处理,避免造成不必要的损失
            }
        }else{
            // 可能网络异常等问题,未获得正确响应结果,建议进行二次查单/人工确认,不要直接失败处理,避免造成不必要的损失
            // 依据自己的业务逻辑进行处理
        }
    }
}

返回结果示例

{
    "reason": "提交充值成功",
    "result": {
        "cardnum": "1", /*充值数量*/
        "ordercash": "100", /*售价*/
        "cardname": "全国加油卡", /*充值名称*/
        "sporder_id": "S20141125221812330", /*聚合订单号*/
        "game_userid": "100011320000991****", /*加油卡卡号*/
        "game_state": "0", /*充值状态:0充值中 1成功 9撤销,刚提交成功的单子状态均为充值中*/
        "uorderid": "S2014111111115" /*用户自定的订单号*/
    },
    "error_code": 0
}

油卡----订单状态查询:

请求参数

名称 必填 类型 说明
key String 在个人中心->我的数据,接口名称上方查看
orderid String 商家订单号,8-32位字母数字组合

代码示例

import com.alibaba.fastjson.JSONObject;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;
import java.text.MessageFormat;
import java.util.concurrent.TimeUnit;

import com.alibaba.fastjson.JSONObject;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;
import java.text.MessageFormat;
import java.util.concurrent.TimeUnit;

public class tjrh_yk {
    private static OkHttpClient client;
    /**
     * 订单状态查询接口地址
     */
    private static final String apiUrl_ordersta = "http://op.tianjurenhe.com/ofpay/sinopec/ordersta";
    /**
     * 订单状态查询接口参数格式
     */
    public static final String YK_ORDERSTA_PARAM = "?orderid={0}&key={1}";

    private static final int TIME_OUT = 20;

    static {
        client = new OkHttpClient.Builder()
                .connectTimeout(TIME_OUT, TimeUnit.SECONDS)
                .readTimeout(TIME_OUT, TimeUnit.SECONDS)
                .writeTimeout(TIME_OUT, TimeUnit.SECONDS)
                .retryOnConnectionFailure(true)
                .build();
    }  
/**
     * 订单状态查询
     * @param orderId 商家订单号,8-32位字母数字组合,自定义
     * @return 返回String结果
     * @throws Exception
     */
    public static void ordersta(String orderId) throws IOException {
        //拼接地址与参数
        String url = apiUrl_ordersta + MessageFormat.format(YK_ORDERSTA_PARAM, orderId, key);
        //创建request对象实例
        Request request = new Request.Builder().url(url).build();
        //获取请求response应答
        Response response = client.newCall(request).execute();
        if(response != null){
            //返回消息体的字符串
            JSONObject result = JSONObject.parseObject(response.body().string());
            if (result.getInteger("error_code") == 0) {
                System.out.println(result);
                // 订单提交成功,根据实际业务逻辑进行处理
            }else{
                // 提交返回码error_code非正常状态,依据官方文档错误码说明,进行逻辑处理
                // 比如:10014,系统异常 / 208516,重复的订单号 等,需要进行二次查询/人工确认处理,不要直接失败处理,避免造成不必要的损失
            }
        }else{
            // 可能网络异常等问题,未获得正确响应结果,建议进行二次查单/人工确认,不要直接失败处理,避免造成不必要的损失
            // 依据自己的业务逻辑进行处理
        }
    }
}

返回结果示例

{
    "reason": "查询成功",
    "result": {
        "cardname": "全国 中石化加油 固定面值加油卡 直充100元",/*商品名称*/
        "game_userid": "1000119000002494353",/*加油卡卡号*/
        "uordercash": "100.000",/*订单消耗金额*/
        "sporder_id": "S17070400085272603302001",/*天聚人合订单号*/
        "game_state": "9",/*状态 1:成功 9:失败 0:充值中*/
        "err_msg": "只能给主卡且卡状态正常的加油卡充值"/*描述,订单失败时返回失败原因*/
    },
    "error_code": 0
}

油卡----订单状态查询(sign校验):

请求参数

名称 必填 类型 说明
key String 在个人中心->我的数据,接口名称上方查看
timestamp String 当前时间戳或随机数,如:1462502925
orderid String 商家订单号,8-32位字母数字组合,由您自己生成
sign String 校验值,md5( OpenID+key+orderid+timestamp),OpenID在个人中心查询

代码示例

//MD5工具类
import java.security.MessageDigest;

public class MD5Util {

    public static String MD5(String s) {
        char[] hexDigits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

        try {
            byte[] e = s.getBytes();
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            mdInst.update(e);
            byte[] md = mdInst.digest();
            int j = md.length;
            char[] str = new char[j * 2];
            int k = 0;

            for (byte byte0 : md) {
                str[k++] = hexDigits[byte0 >>> 4 & 15];
                str[k++] = hexDigits[byte0 & 15];
            }

            return new String(str).toLowerCase();
        } catch (Exception var10) {
            var10.printStackTrace();
            return null;
        }
    }
}

//调用订单状态查询(sign校验)的主类
import com.alibaba.fastjson.JSONObject;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;
import java.text.MessageFormat;
import java.util.concurrent.TimeUnit;

import com.alibaba.fastjson.JSONObject;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;
import java.text.MessageFormat;
import java.util.concurrent.TimeUnit;

public class tjrh_yk {
    private static OkHttpClient client;
    /**
     * 订单状态查询(sign校验)接口地址
     */
    private static final String apiUrl_sordersta = "http://op.tianjurenhe.com/ofpay/sinopec/sordersta";
    /**
     * 订单状态查询(sign校验)参数格式
     */
    public static final String YK_SORDERSTA_PARAM = "?orderid={0}&key={1}&timestamp={2}&sign={3}";
    /**

    private static final int TIME_OUT = 20;

    static {
        client = new OkHttpClient.Builder()
                .connectTimeout(TIME_OUT, TimeUnit.SECONDS)
                .readTimeout(TIME_OUT, TimeUnit.SECONDS)
                .writeTimeout(TIME_OUT, TimeUnit.SECONDS)
                .retryOnConnectionFailure(true)
                .build();
    }  
 /**
     * 订单状态查询
     * @param orderId 商家订单号,8-32位字母数字组合,自定义
     * @param timestamp 当前时间戳或随机数
     * @return 返回String结果
     * @throws Exception
     */
    public static void sordersta(String orderId,String timestamp) throws IOException {
        //OpenID+key+orderid+timestamp
        String sign = MD5Util.MD5(openId + key + orderId + timestamp);
        //拼接地址与参数
        String url = apiUrl_sordersta + MessageFormat.format(YK_SORDERSTA_PARAM, orderId, key,timestamp,sign);
        //创建request对象实例
        Request request = new Request.Builder().url(url).build();
        //获取请求response应答
        Response response = client.newCall(request).execute();
        if(response != null){
            //返回消息体的字符串
            JSONObject result = JSONObject.parseObject(response.body().string());
            if (result.getInteger("error_code") == 0) {
                System.out.println(result);
                // 订单提交成功,根据实际业务逻辑进行处理
            }else{
                // 提交返回码error_code非正常状态,依据官方文档错误码说明,进行逻辑处理
                // 比如:10014,系统异常 / 208516,重复的订单号 等,需要进行二次查询/人工确认处理,不要直接失败处理,避免造成不必要的损失
            }
        }else{
            // 可能网络异常等问题,未获得正确响应结果,建议进行二次查单/人工确认,不要直接失败处理,避免造成不必要的损失
            // 依据自己的业务逻辑进行处理
        }
    }

返回结果示例

{
    "reason": "查询成功",
    "result": {
        "cardname": "全国 中石化加油 固定面值加油卡 直充100元",/*商品名称*/
        "game_userid": "1000119000002494353",/*加油卡卡号*/
        "uordercash": "100.000",/*订单消耗金额*/
        "sporder_id": "S17070400085272603302001",/*聚合订单号*/
        "game_state": "9",/*状态 1:成功 9:失败 0:充值中*/
        "err_msg": "只能给主卡且卡状态正常的加油卡充值"/*描述,订单失败时返回失败原因*/
    },
    "error_code": 0
}

评论区

励志做一条安静的咸鱼,从此走上人生巅峰。

0

0

1

举报