wordpress一键使用PDD客服做图库插件

图库链接:https://ims-chat.pinduoduo.com/index.html?client=ims

找一个GITHUB得,SM.MS得图库插件。目前一键不能使用得

https://github.com/qcgzxw/SMMS-UPLOADER/tree/master

修改文件为:content.min.js

这样再后台发表文章得时候就能直接一键添加到内容。

因为涉及跨域问题。我架设了代理端。

具体得代码为

  1. jQuery(document).ready(function($) {
  2. $('#admin-img-file').change(function() {
  3. for (var i = 0; i < this.files.length; i++) {
  4. var f = this.files[i];
  5. // 第一步:获取签名
  6. $.ajax({
  7. url: 'http://你自己得服务器IP:6003/proxy?url=https://mms.pinduoduo.com/plateau/chat/ims/get_upload_sign',
  8. type: 'POST',
  9. headers: {
  10. 'Content-Type': 'application/json',
  11. },
  12. data: '{"data":{"cmd":"get_upload_sign"}}',
  13. success: function(response) {
  14. response=JSON.parse(response);
  15. var signature = response.result.data.signature;
  16. var uploadUrl = response.result.data.url; // 或者 response.result.data.url
  17. console.log(signature);
  18. console.log(uploadUrl);
  19. // 第二步:使用签名上传文件
  20. uploadFileWithSignature(f, signature, uploadUrl);
  21. },
  22. error: function(xhr, status, error) {
  23. alert('获取签名失败: ' + error);
  24. }
  25. });
  26. }
  27. });
  28.  
  29. function uploadFileWithSignature(file, signature, uploadUrl) {
  30. console.log(file);
  31. if (file) {
  32. var reader = new FileReader();
  33. reader.onload = function(e) {
  34. // e.target.result 包含了文件的 Base64 编码字符串
  35. var base64String = e.target.result;
  36. console.log(base64String); // 在控制台中打印 Base64 编码的字符串
  37. // 在这里可以将 base64String 发送到服务器或进行其他操作
  38. // 创建一个包含文件数据和签名的 JSON 对象
  39. var data = {
  40. image: base64String,
  41. upload_sign: signature
  42. };
  43. $.ajax({
  44. url: 'http://你自己得服务器IP:6003/proxy?url='+uploadUrl,
  45. type: 'POST',
  46. headers: {
  47. 'Content-Type': 'application/json',
  48. },
  49. data: JSON.stringify(data),
  50. success: function(res) {
  51. res=JSON.parse(res);
  52. $('textarea[name="content"]').insertAtCaret('<img class="aligncenter" src="' + res.url + '" />');
  53. $("html").find("iframe").contents().find("body").append('<img class="aligncenter" src="' + res.url + '" />');
  54. },
  55. error: function(xhr, status, error) {
  56. alert('图片上传失败: ' + error);
  57. }
  58. });
  59. };
  60. reader.onerror = function(error) {
  61. console.error('Error: ', error);
  62. };
  63. fileb=reader.readAsDataURL(file); // 读取文件内容并转换为 Base64 编码
  64. }
  65. }
  66.  
  67. $.fn.extend({
  68. insertAtCaret: function(myValue) {
  69. var $t = $(this)[0];
  70. if (document.selection) {
  71. this.focus();
  72. sel = document.selection.createRange();
  73. sel.text = myValue;
  74. this.focus()
  75. } else if ($t.selectionStart || $t.selectionStart == "0") {
  76. var startPos = $t.selectionStart;
  77. var endPos = $t.selectionEnd;
  78. var scrollTop = $t.scrollTop;
  79. $t.value = $t.value.substring(0, startPos) + myValue + $t.value.substring(endPos, $t.value.length);
  80. this.focus();
  81. $t.selectionStart = startPos + myValue.length;
  82. $t.selectionEnd = startPos + myValue.length;
  83. $t.scrollTop = scrollTop
  84. } else {
  85. this.value += myValue;
  86. this.focus()
  87. }
  88. }
  89. });
  90. });

 

代理段代码为

  1. const express = require('express');
  2. const request = require('request');
  3. const app = express();
  4. // 允许所有跨域请求
  5. app.use((req, res, next) => {
  6. res.header('Access-Control-Allow-Origin', '*'); // 允许所有域的请求,出于安全考虑,生产环境中应指定具体域名
  7. res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
  8. res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Accept, X-Requested-With, Origin, Referer');
  9. if (req.method === 'OPTIONS') {
  10. res.sendStatus(204); // 预检请求直接返回204
  11. } else {
  12. next();
  13. }
  14. });
  15. // 解析 JSON 格式的请求体
  16. app.use(express.json());
  17. // 解析 URL 编码的表单数据
  18. app.use(express.urlencoded({ extended: true }));
  19. app.use('/proxy', (req, res) => {
  20. const targetUrl = req.query.url;
  21. console.log(targetUrl);
  22. if (!targetUrl) {
  23. return res.status(400).send('Missing URL parameter');
  24. }
  25. const postData = req.body;
  26. //console.log(req.body);
  27. const headers = {
  28.  
  29. 'Content-Type': 'application/json',
  30.  
  31. 'Cookie': 'imsChatKey=c05410f991e41d77dc3440865cb3fe581dc2975e; api_uid=CkNFrWcc+9mFdgCN5P99Ag=='
  32. };
  33. // 发起请求到目标服务器,并转发请求体中的数据
  34. //console.log(JSON.stringify(postData));
  35. request({
  36. method: 'POST',
  37. url: targetUrl,
  38. headers: headers,
  39. body: JSON.stringify(postData) // 将 req.body 转换为 JSON 字符串
  40. }, (error, response, body) => {
  41. if (error) {
  42. return res.status(500).send('Error proxying request');
  43. }
  44. res.status(response.statusCode).send(body);

 

保存文件为X.JS,之后NODE运行即可

node X.JS

结语

PDD上传得时候好像需要验证COOKIE,目前我是固定定死不知道会不会有问题。不带得话拒绝请求

其他没限制。PDD不倒,图库应该就一直有效。嫖就是了

发表评论

邮箱地址不会被公开。 必填项已用*标注