登录
原创

基于JAVA的天聚人合通用礼品卡接口调用示例代码

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

前期准备

接口说明

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

礼品卡—商品列表:

请求参数

名称 必填 类型 说明
key String 在个人中心->我的数据,接口名称上方查看
dtype String 返回的格式,json或xml,默认json

代码示例

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_lpk {
    private static OkHttpClient client;
    /**查询商品列表接口地址*/
    private static final String apiUrl_products = "http://op.tianjurenhe.com/giftCard/products";
    /**查询商品列表接口参数格式*/
    public static final String LPK_PRODUCTS_PARAM = "?key={0}&dtype={1}";
    /**申请的接口Appkey*/
    public static final String key = 您申请的key;

    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();
    }

    /**
     * 查询商品列表
     * @return 返回String结果
     * @throws Exception
     */
    public static void findProducts(String dtype) throws IOException {
        //拼接地址与参数
        String url = apiUrl_products + MessageFormat.format(LPK_PRODUCTS_PARAM,key,dtype);
        //创建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{
            // 可能网络异常等问题,未获得正确响应结果,建议进行二次查单/人工确认,不要直接失败处理,避免造成不必要的损失
            // 依据自己的业务逻辑进行处理
        }
    }

返回结果示例

/* 示例内容有所省略,请以您取到的最新数据为准 */
/* 商品ID基本不会变,请做好长期的缓存 */
/* 如果您的需求量较大,请告诉我们您需要的卡种以便我们备货 */
/* 如需各卡的使用说明,请访问 https://www.tianjurenhe.com/codedoc/?type=gift */

{
  "reason": "查询成功",
  "result": [
    {
      "productId": "100026", /* 商品ID基本不会变,请做好长期的缓存 */
      "name": "携程任我行100元", /* 商品名 */
      "value": "100.00", /* 商品面值 */
      "discount": "0.998" /* 默认折扣,如您需求量较大,可议 */
    },
    {
      "productId": "100027",
      "name": "携程任我行500元",
      "value": "500.00",
      "discount": "0.998"
    },
   {
      "productId": "310001",
      "name": "阳澄湖牌出口有机大闸蟹298型", /* 优惠价格,企业采购,请咨询客服*/
      "value": "298.00",
      "discount": "0.900"
    },
    此处有省略
  ],
  "error_code": 0
}

礼品卡----发货:

请求参数

名称 必填 类型 说明
key String 在个人中心->我的数据,接口名称上方查看
dtype String 返回的格式,json或xml,默认json
num int 购买数量,1-10
productId String 商品ID,从商品列表查询
userOrderId String 您的订单号,50个字符内,允许数字、字母、下划线,请保证单号唯一
sign String MD5(openId+key+num+userOrderId),加号不是MD5的内容,32位小写

代码示例

//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_lpk {
    private static OkHttpClient client;
    /**发货接口地址*/
    private static final String apiUrl_buy = "http://op.tianjurenhe.com/giftCard/buy";
    /**发货接口参数格式*/
    public static final String LPK_BUY_PARAM = "?key={0}&dtype={1}&num={2}&productId={3}&userOrderId={4}&sign={5}";
    /**申请的接口Appkey*/
    public static final String key = 您申请的key;

    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();
    }

    /**
     * 发货
     * @return 返回String结果
     * @throws Exception
     */
    public static void buy(String dtype,Integer num,String productId, String userOrderId) throws IOException {
        //openId+key+num+userOrderId
        String sign = MD5Util.MD5(openId + key + num + userOrderId);
        //拼接地址与参数
        String url = apiUrl_buy + MessageFormat.format(LPK_BUY_PARAM,key,dtype,num,productId,userOrderId,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": {
    "juheOrderId": "JUHE14575079213274NN", /*聚合订单号*/
    "userOrderId": "MYORDER123456", /*您的订单号*/
    "num": 1, /*本次发货数量*/
    "deduction":100, /*最终扣费总额*/
    "cards": [ /*卡信息*/
      {
        "cardNo": "DCDCDCJUHEDCDC", /*DES加密后的卡号,解密方法见:https://www.tianjurenhe.com/codedoc/?type=card、
https://www.tianjurenhe.com/codedoc/?type=decrypt*/
        "cardPws": "YOYOYOYOCKN", /*DES加密后的卡密,解密方法见:https://www.tianjurenhe.com/codedoc/?type=card、
https://www.tianjurenhe.com/codedoc/?type=decrypt*/
        "expireDate": "20251231" /*失效时间*/
      }
    ]
  },
  "error_code": 0
}

礼品卡----订单详情:

请求参数

名称 必填 类型 说明
key String 在个人中心->我的数据,接口名称上方查看
dtype String 返回的格式,json或xml,默认json
juheOrderId String 人合订单号
userOrderId String 用户订单号,两个订单号提供一个即可
sign String MD5(openId+key+orderid),orderid指的是聚合订单号或者用户订单号中的一个

代码示例

//MD5工具类
package com.tjrh.HttpRequest;

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;
        }
    }
}

//调用主类
package com.tjrh.HttpRequest;

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_lpk {
    private static OkHttpClient client;
    /**查询订单详情接口地址*/
    private static final String apiUrl_detail = " http://op.tianjurenhe.com/giftCard/detail";
    /**查询订单详情接口参数格式*/
    public static final String LPK_DETAIL_PARAM = "?key={0}&dtype={1}&juheOrderId={2}&userOrderId={3}&sign={4}";
    /**在个人中心查询*/
    public static final String openId = 您的openId;
    /**申请的接口Appkey*/
    public static final String key = 您申请的key;

    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();
    }

   /**
     * 订单详情
     * @return 返回String结果
     * @throws Exception
     */
    public static void detail(String dtype,String juheOrderId, String userOrderId) throws IOException {
        //MD5(openId+key+orderid),orderid指的是聚合订单号或者用户订单号中的一个
        String sign = MD5Util.MD5(openId + key + juheOrderId);
        //拼接地址与参数
        String url = apiUrl_detail + MessageFormat.format(LPK_DETAIL_PARAM,key,dtype,juheOrderId,userOrderId,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": {
    "juheOrderId": "201603120014351360130234",
    "productId": "100022",
    "submitTime": "2016-03-12 00:15:34",
    "message": "发货成功",
    "cards": [
      {
        "cardNo": "tV47z0fgrFuyAu1an1vi95ciamcrypted",
        "cardPws": "udOpZ+ESspfRWjaEAjidliamcrypted",
        "expireDate": "20181119"
      }
    ]
  },
  "error_code": 0
}

礼品卡----历史订单查询:

请求参数

名称 必填 类型 说明
key String 在个人中心->我的数据,接口名称上方查看
​dtype String 返回的格式,json或xml,默认json
begin String 开始的日期,如:2020-10-01
​end String 结束的日期,如:2020-11-01

代码示例

package com.tjrh.HttpRequest;

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_lpk {
    private static OkHttpClient client;
    /**历史订单查询接口地址*/
    private static final String apiUrl_orders = "http://op.tianjurenhe.com/giftCard/orders";
    /**历史订单查询接口参数格式*/
    public static final String LPK_ORDERS_PARAM = "?key={0}&dtype={1}&begin={2}&end={3}";
    /**申请的接口Appkey*/
    public static final String key = 您申请的key;

    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();
    }

    /**
     * 历史订单查询
     * @return 返回String结果
     * @throws Exception
     */
    public static void findOrders(String dtype,String begin,String end) throws IOException {
        //拼接地址与参数
        String url = apiUrl_orders + MessageFormat.format(LPK_ORDERS_PARAM,key,dtype,begin,end);
        //创建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": [
    {
      "juheOrderId": "201603141423227380180045",
      "productId": "100058",
      "submitTime": "2016-03-14 14:23:22",
      "message": "抱歉:此商品暂无库存"
    },
    {
      "juheOrderId": "201603141550086498910071",
      "productId": "100022",
      "submitTime": "2016-03-14 15:51:17",
      "message": "发货成功"
    }
  ],
  "error_code": 0
}

礼品卡----账户变动记录:

请求参数

名称 必填 类型 说明
key String 在个人中心->我的数据,接口名称上方查看
​dtype String 返回的格式,json或xml,默认json
begin String 开始日期,如:2016-10-01
​end String 结束日期,如:2020-11-01

代码示例

package com.tjrh.HttpRequest;

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_lpk {
    private static OkHttpClient client;
    /**账户变动记录接口地址*/
    private static final String apiUrl_account = "http://op.tianjurenhe.com/giftCard/account.php";
    /**账户变动记录接口参数格式*/
    public static final String LPK_ACCOUNT_PARAM = "?key={0}&dtype={1}&begin={2}&end={3}";
    /**申请的接口Appkey*/
    public static final String key = 您申请的key;

    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();
    }

    /**
     * 账户变动记录查询
     * @return 返回String结果
     * @throws Exception
     */
    public static void findAccount(String dtype,String begin,String end) throws IOException {
        //拼接地址与参数
        String url = apiUrl_account + MessageFormat.format(LPK_ACCOUNT_PARAM,key,dtype,begin,end);
        //创建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": [
    {
      "juheOrderId": "2016033434341122540472",
      "price": "1000.00",
      "time": "2016-03-11 22:54:04",
      "type": "0" /*0表示扣款,1表示加款*/
    },
    {
      "juheOrderId": "201342343258",
      "price": "999.00",
      "time": "2016-03-11 22:55:32",
      "type": "0"
    },
    有省略
  ],
  "error_code": 0
}

评论区

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

0

0

0