package com.fjhx.utils;

import com.alibaba.fastjson.JSONObject;
import com.fjhx.constants.WeChatConstants;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.Map;

public class WeixinUtil {

    private static final RestTemplate restTemplate = new RestTemplate();

//    public static void main(String[] args) {
//        String suiteToken = code2Session("dasasd");
//    }


    /**
     * 由企业微信后台定时推送给"指令回调URL"解析出的suiteTicket
     *
     * @return suiteTicket
     */
    public static String getSuiteTicket() {
        return "test";
    }

    /**
     * 获取第三方应用凭证
     * TODO 缓存token
     *
     * @return suite_access_token
     * @link { https://developer.work.weixin.qq.com/document/path/90600 }
     */
    public static String getSuiteToken() {
        Map<String, String> body = new HashMap<>();
        body.put("suite_id", WeChatConstants.SUITE_ID);
        body.put("suite_secret", WeChatConstants.SUITE_SECRET);
        body.put("suite_ticket", getSuiteTicket());

        String resultStr = restTemplate.postForObject(
                "https://qyapi.weixin.qq.com/cgi-bin/service/get_suite_token", body, String.class);

        JSONObject jsonObject = JSONObject.parseObject(resultStr);

        System.out.println(jsonObject);

        return resultStr;
    }

    /**
     * 获取 session_key、用户userid以及用户所在企业的corpid等信息
     * TODO 缓存token
     *
     * @param jsCode 前端传入临时授权码
     * @return {
     * <p> corpid: 用户所属企业的corpid
     * <p> userid: 用户在企业内的UserID，对应管理端的账号，企业内唯一。注意：如果用户所在企业并没有安装此小程序应用，则返回加密的userid
     * <p> session_key: 会话密钥
     * <p> open_userid: 全局唯一。对于同一个服务商，不同应用获取到企业内同一个成员的open_userid是相同的，最多64个字节；同一用户，对于不同服务商open_userid是不同的
     * <p> errcode: 返回码
     * <p> errmsg: 对返回码的文本描述内容
     * }
     * @link { https://developer.work.weixin.qq.com/document/path/92423 }
     */
    public static String code2Session(String jsCode) {
        String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/service/miniprogram/jscode2session" +
                "?suite_access_token=%s&js_code=%s&grant_type=authorization_code", getSuiteToken(), jsCode);

        String result = restTemplate.getForObject(url, String.class);

        System.out.println(result);

        return result;
    }

}
