Pārlūkot izejas kodu

拼多多接口修改

小么熊🐻 4 gadi atpakaļ
vecāks
revīzija
b6bb567e79

+ 1 - 110
zzjs-admin/src/test/java/com/miaxis/test/NormalTest.java

@@ -1,127 +1,18 @@
 package com.miaxis.test;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.miaxis.ZzjsApplication;
-import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
-import com.wechat.pay.contrib.apache.httpclient.auth.AutoUpdateCertificatesVerifier;
-import com.wechat.pay.contrib.apache.httpclient.auth.PrivateKeySigner;
-import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Credentials;
-import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Validator;
-import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.util.EntityUtils;
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.core.io.ClassPathResource;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.security.KeyFactory;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.PKCS8EncodedKeySpec;
-import java.util.Base64;
-
-
 @SpringBootTest(classes = ZzjsApplication.class)
 @RunWith(SpringRunner.class)
 public class NormalTest {
 
-    private HttpClient httpClient = null;
-    @Before
-    public void test1() throws Exception {
-        ClassPathResource classPathResource = new ClassPathResource("");
-        File file = new ClassPathResource("wechatpay/apiclient_key.pem").getFile();
-        String realPath =file.getAbsolutePath();
-        PrivateKey privateKey = getPrivateKey(realPath);
-//        // 加载商户私钥(privateKey:私钥字符串)
-//        PrivateKey merchantPrivateKey = PemUtil
-//                .loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes("utf-8")));
-
-        // 加载平台证书(mchId:商户号,mchSerialNo:商户证书序列号,apiV3Key:V3密钥)
-        AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
-                new WechatPay2Credentials("1608699504",
-                        new PrivateKeySigner("487159E168001CDBA0EFE2C988249A84023AD6CC", privateKey)),
-                "qqwweerrttyyuuiioopp123456789000".getBytes("utf-8"));
-
-        // 初始化httpClient
-        httpClient = WechatPayHttpClientBuilder.create()
-                .withMerchant("1608699504", "487159E168001CDBA0EFE2C988249A84023AD6CC", privateKey)
-                .withValidator(new WechatPay2Validator(verifier)).build();
-
-        //创建订单
-
-
-
-
-    }
     @Test
-    public void CreateOrder() throws Exception{
-        HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi");
-        httpPost.addHeader("Accept", "application/json");
-        httpPost.addHeader("Content-type","application/json; charset=utf-8");
-
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        ObjectMapper objectMapper = new ObjectMapper();
-
-        ObjectNode rootNode = objectMapper.createObjectNode();
-        rootNode.put("mchid","1608699504")
-                .put("appid", "wx8f43db501343feab")
-                .put("description", "Image形象店-深圳腾大-QQ公仔")
-                .put("notify_url", "https://www.weixin.qq.com/wxpay/pay.php")
-                .put("out_trade_no", "1217752501201407033233368044");
-        rootNode.putObject("amount")
-                .put("total", 1);
-        rootNode.putObject("payer")
-                .put("openid", "oO7PJ5GVKa0c_rfU34yIO0RgfTTg");
-
-        objectMapper.writeValue(bos, rootNode);
-
-        httpPost.setEntity(new StringEntity(bos.toString("UTF-8")));
-        HttpResponse response = httpClient.execute(httpPost);
-
-        String bodyAsString = EntityUtils.toString(response.getEntity());
-        System.out.println(bodyAsString);
-        System.out.println(bodyAsString);
-    }
-
-
-
-    /**
-     * 获取私钥。
-     *
-     * @param filename 私钥文件路径  (required)
-     * @return 私钥对象
-     */
-    public static PrivateKey getPrivateKey(String filename) throws IOException {
-        String content = new String(Files.readAllBytes(Paths.get(filename)), "utf-8");
-        try {
-            String privateKey = content.replace("-----BEGIN PRIVATE KEY-----", "")
-                    .replace("-----END PRIVATE KEY-----", "")
-                    .replaceAll("\\s+", "");
+    public void test1() throws Exception {
 
-            KeyFactory kf = KeyFactory.getInstance("RSA");
-            return kf.generatePrivate(
-                    new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey)));
-        } catch (NoSuchAlgorithmException e) {
-            throw new RuntimeException("当前Java环境不支持RSA", e);
-        } catch (InvalidKeySpecException e) {
-            throw new RuntimeException("无效的密钥格式");
-        }
     }
 
 

+ 97 - 0
zzjs-admin/src/test/java/com/miaxis/test/NormalTest2.java

@@ -0,0 +1,97 @@
+package com.miaxis.test;
+
+import com.miaxis.ZzjsApplication;
+import com.miaxis.common.sms.MD5Utils;
+import com.miaxis.common.utils.sign.Md5Utils;
+import com.miaxis.feign.dto.Film;
+import com.miaxis.feign.service.IFilmService;
+import com.miaxis.feign.service.IWxService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@SpringBootTest(classes = ZzjsApplication.class)
+@RunWith(SpringRunner.class)
+public class NormalTest2 {
+    @Autowired
+    private IWxService ixService;
+
+    @Autowired
+    private IFilmService filmService;
+
+    private static String appKey = "10000000000";
+
+    private static String appSecret = "25f9e794323b453885f5181f1b624d0b";
+
+    private static String appSecret2 = "&appSecret=25f9e794323b453885f5181f1b624d0b";
+
+
+    public static String getSign(Map<String, Object> params,String appSecret2) {
+        Map<String, Object> sortMap = new TreeMap<String, Object>();
+        sortMap.putAll(params);
+        // 以k1=v1&k2=v2...方式拼接参数
+        StringBuilder builder = new StringBuilder();
+        for (Map.Entry<String, Object> s : sortMap.entrySet()) {
+            String k = s.getKey();
+            Object v = s.getValue();
+            builder.append(k).append("=").append(v).append("&");
+        }
+        if (!sortMap.isEmpty()) {
+            builder.deleteCharAt(builder.length() - 1);
+        }
+        builder.append(appSecret2);
+        return builder.toString();
+    }
+
+    @Test
+    public void test2() throws Exception {
+        long timeLong = System.currentTimeMillis();
+        String time = String.valueOf(timeLong/1000);
+
+        Map<String,Object> param = new HashMap<String,Object>();
+        param.put("appKey",appKey);
+        param.put("time",time);
+        String sign = getSign(param,appSecret2);
+        String md5 = MD5Utils.MD5Encode(sign);
+        System.out.println(md5);
+
+        Film film = new Film();
+        film.setAppKey(appKey);
+        film.setTime(time);
+        film.setSign(md5);
+        String result = filmService.geFilmInfo(film);
+
+
+
+        System.out.println(result);
+    }
+
+
+
+    public static void main(String[] args) {
+//        Long time = System.currentTimeMillis();
+//        System.out.println(time);
+       long time = 1610610858l-1619334887l;
+//       System.out.println(time/1000);
+        Date date = new Date(1610610858000l);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+        String str = sdf.format(date);
+        System.out.println(str);
+
+    }
+
+
+
+
+
+
+
+
+
+}

+ 101 - 0
zzjs-admin/src/test/java/com/miaxis/test/NormalTest3.java

@@ -0,0 +1,101 @@
+package com.miaxis.test;
+
+import com.miaxis.ZzjsApplication;
+import com.miaxis.common.sms.MD5Utils;
+import com.miaxis.feign.dto.Film;
+import com.miaxis.feign.dto.Pdd;
+import com.miaxis.feign.service.IFilmService;
+import com.miaxis.feign.service.IPddService;
+import com.miaxis.feign.service.IWxService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeMap;
+
+@SpringBootTest(classes = ZzjsApplication.class)
+@RunWith(SpringRunner.class)
+public class NormalTest3 {
+
+    @Autowired
+    private IPddService pddService;
+
+    private static String client_id = "fa0f2debb5b0444b9719919d7b8204d1";
+    private static String client_secret = "3305b6bb37252495848e67fd991134651e308495";
+    private static String pid = "1642187_203462988";
+
+    public static String getSign(Map<String, Object> params,String client_secret) {
+        Map<String, Object> sortMap = new TreeMap<String, Object>();
+        sortMap.putAll(params);
+        // 以k1v1k2v2...方式拼接参数
+        StringBuilder builder = new StringBuilder();
+        for (Map.Entry<String, Object> s : sortMap.entrySet()) {
+            String k = s.getKey();
+            Object v = s.getValue();
+            builder.append(k).append(v);
+        }
+//        if (!sortMap.isEmpty()) {
+//            builder.deleteCharAt(builder.length() - 1);
+//        }
+        builder.append(client_secret);
+        builder.insert(0,client_secret);
+        return builder.toString();
+    }
+
+    @Test
+    public void test() throws Exception {
+        long timeLong = System.currentTimeMillis();
+        String timestamp = String.valueOf(timeLong/1000);
+        Pdd pdd = new Pdd();
+        //公共请救参数
+        pdd.setType("pdd.ddk.resource.url.gen");
+        pdd.setClient_id(client_id);
+        pdd.setTimestamp(timestamp);
+        //请求参数
+        pdd.setGenerate_we_app(true);
+        pdd.setPid(pid);
+   //     pdd.setResource_type(39996);
+      //  pdd.setUrl("https://mobile.yangkeduo.com/duo_transfer_channel.html?resourceType=50005&pid=1642187_203462988&cpsSign=CE_210426_1642187_203462988_bd4c17974e452d309d0604bd7f8b2898&duoduo_type=2");
+        pdd.setUrl("https://mobile.yangkeduo.com/duo_transfer_channel.html?resourceType=50005&pid=1642187_203462988&cpsSign=CE_210427_1642187_203462988_dacadfcef522deb82267a7f819874327&duoduo_type=2");
+
+        //sign 加密
+        Map<String,Object> param = new HashMap<String,Object>();
+        //公共参数
+        param.put("type",pdd.getType());
+        param.put("client_id",pdd.getClient_id());
+        param.put("timestamp",pdd.getTimestamp());
+        //请求参数
+        param.put("generate_we_app",pdd.getGenerate_we_app());
+        param.put("pid",pdd.getPid());
+//        param.put("resource_type",pdd.getResource_type());
+        param.put("url",pdd.getUrl());
+
+        String sign = getSign(param,client_secret);
+        System.out.println(sign);
+        String md5 = MD5Utils.MD5Encode(sign).toUpperCase();
+        pdd.setSign(md5);
+
+        System.out.println(pdd);
+        String result = pddService.getPdd(pdd);
+        System.out.println(result);
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+}

+ 11 - 0
zzjs-service/src/main/java/com/miaxis/feign/dto/Film.java

@@ -0,0 +1,11 @@
+package com.miaxis.feign.dto;
+
+import lombok.Data;
+import org.springframework.web.bind.annotation.RequestBody;
+@Data
+public class Film {
+    String appKey;
+    String time;
+    String sign;
+
+}

+ 11 - 0
zzjs-service/src/main/java/com/miaxis/feign/dto/FilmResult.java

@@ -0,0 +1,11 @@
+package com.miaxis.feign.dto;
+
+
+import lombok.Data;
+
+@Data
+public class FilmResult {
+     int cityId;
+     String pinYin;
+     String regionName;
+}

+ 25 - 0
zzjs-service/src/main/java/com/miaxis/feign/dto/Pdd.java

@@ -0,0 +1,25 @@
+package com.miaxis.feign.dto;
+
+import lombok.Data;
+
+@Data
+public class Pdd {
+
+    //公共参数
+    private String type;  // 必填  API接口名称
+    private String client_id; //必填 POP分配给应用的client_id
+   // private String access_token;  //非必填	 通过code获取的access_token(无需授权的接口,该字段不参与sign签名运算)
+    private String timestamp; //必填 UNIX时间戳,单位秒,需要与拼多多服务器时间差值在10分钟内
+  //  private String data_type; //非必填  响应格式,即返回数据的格式,JSON或者XML(二选一),默认JSON,注意是大写
+  //  private String version;   //非必填 API协议版本号,默认为V1,可不填
+    private String sign; //API输入参数签名结果,签名算法参考开放平台接入指南第三部分底部。
+
+    //请求参数说明
+    private Boolean generate_we_app; //是否生成拼多多福利券微信小程序推广信息
+    private String pid; //必填	 推广位ID
+    private Integer resource_type; //非必填 频道来源:4-限时秒杀,39997-充值中心, 39998-活动转链,39996-百亿补贴,39999-电器城,40000-领券中心,50005-火车票
+    private String url; //非必填  原链接
+
+
+
+}

+ 25 - 0
zzjs-service/src/main/java/com/miaxis/feign/service/IFilmService.java

@@ -0,0 +1,25 @@
+package com.miaxis.feign.service;
+
+
+import com.miaxis.common.config.FeignConfig;
+import com.miaxis.feign.dto.Film;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ *
+ * 电影接口测试
+ */
+@FeignClient(name="filmService",
+        url = "http://movieapi-test.taototo.cn",configuration = FeignConfig.class)
+@Component
+public interface IFilmService {
+    @PostMapping(value = "/movieapi/movie-info/get-city-list")
+    String geFilmInfo(Film film);
+
+
+}

+ 23 - 0
zzjs-service/src/main/java/com/miaxis/feign/service/IPddService.java

@@ -0,0 +1,23 @@
+package com.miaxis.feign.service;
+
+
+import com.miaxis.common.config.FeignConfig;
+import com.miaxis.feign.dto.Film;
+import com.miaxis.feign.dto.Pdd;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.PostMapping;
+
+/**
+ *
+ * 电影接口测试
+ */
+@FeignClient(name="pddService",
+        url = "http://gw-api.pinduoduo.com",configuration = FeignConfig.class)
+@Component
+    public interface IPddService {
+    @PostMapping(value = "/api/router")
+    String getPdd(Pdd pdd);
+
+
+}