package com.izouma.nineth.service;

import cn.com.sandpay.cashier.sdk.CertUtil;
import com.alibaba.fastjson.JSONObject;
import com.izouma.nineth.ApplicationTests;
import com.izouma.nineth.utils.DateTimeUtils;
import com.izouma.nineth.utils.SnowflakeIdWorker;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

class SandPayServiceTest {
    String mid = "6888806043057";

    static {
        try {
            CertUtil.init("classpath:cert/sand.cer", "classpath:cert/6888806043057.pfx", "3edc#EDC");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Test
    void pay() {
        String orderId = new SnowflakeIdWorker(0, 0).nextId() + "";
        if (orderId.length() < 12) {
            for (int i = orderId.length(); i < 12; i++) {
                orderId = "0" + orderId;
            }
        }

        JSONObject extend = new JSONObject();
        extend.put("type", "test");
        extend.put("orderId", orderId);

        JSONObject header = new JSONObject();
        header.put("version", "1.0");                      //版本号
        header.put("method", "sandpay.trade.precreate");   //接口名称:统一下单并支付
        header.put("productId", "00000006");               //产品编码
        header.put("mid", mid);     //商户号
        header.put("accessType", "1");                     //接入类型设置为普通商户接入
        header.put("channelType", "07");                   //渠道类型：07-互联网   08-移动端
        header.put("reqTime", SandPayService.getReqTime());               //请求时间

        JSONObject body = new JSONObject();
        body.put("payTool", "0401");                                  //支付工具: 固定填写0401
        body.put("orderCode", orderId);                               //商户订单号
        body.put("totalAmount", "000000000001");               //订单金额 12位长度，精确到分
        //body.put("limitPay", "5");                                  //限定支付方式 送1-限定不能使用贷记卡	送4-限定不能使用花呗	送5-限定不能使用贷记卡+花呗
        body.put("subject", "充值");                                 //订单标题
        body.put("body", "充值");                                    //订单描述
        body.put("txnTimeOut", SandPayService.getTimeout(LocalDateTime.now(), 180));      //订单超时时间
        body.put("notifyUrl", "https://test.raex.vip/sandpay/notify");      //异步通知地址
        body.put("bizExtendParams", "");                              //业务扩展参数
        body.put("merchExtendParams", "");                            //商户扩展参数
        body.put("extend", extend.toJSONString());                    //扩展域

        JSONObject res = SandPayService.requestServer(header, body, "https://cashier.sandpay.com.cn/qr/api/order/create");
    }

    @Test
    public void query() {
        String orderId = "980860142826299392";
        JSONObject header = new JSONObject();
        header.put("version", "1.0");
        header.put("method", "sandpay.trade.query");
        header.put("productId", "00000006");
        header.put("mid", mid);    //商户号
        header.put("accessType", "1");
        header.put("channelType", "07");
        header.put("reqTime", SandPayService.getReqTime());

        JSONObject body = new JSONObject();
        body.put("orderCode", orderId);
        body.put("extend", "");

        SandPayService.requestServer(header, body, "https://cashier.sandpay.com.cn/qr/api/order/query");
    }

    @Test
    public void refund() {
        JSONObject header = new JSONObject();
        header.put("version", "1.0");                           //版本号
        header.put("method", "sandpay.trade.refund");           //接口名称:退货
        header.put("productId", "00000006");                    //产品编码
        header.put("mid", mid);          //商户号
        header.put("accessType", "1");                          //接入类型设置为普通商户接入
        header.put("channelType", "07");                        //渠道类型：07-互联网   08-移动端
        header.put("reqTime", SandPayService.getReqTime());                    //请求时间

        JSONObject body = new JSONObject();
        body.put("orderCode", new SnowflakeIdWorker(0, 0).nextId());        //商户订单号
        body.put("oriOrderCode", "981961667879387136");        //原交易订单号
        body.put("refundAmount", "000000005100");          //退货金额
        body.put("refundReason", "退款");                         //退货原因
        body.put("notifyUrl", "https://test.raex.vip/sandpay/notify");  //异步通知地址
        body.put("extend", "");

        SandPayService.requestServer(header, body, "https://cashier.sandpay.com.cn/qr/api/order/refund");
    }

    @Test
    public void queryTransfer() {
    }
}