All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.binarywang.wxpay.service.impl.ComplaintServiceImpl Maven / Gradle / Ivy

The newest version!
package com.github.binarywang.wxpay.service.impl;

import com.github.binarywang.wxpay.bean.complaint.*;
import com.github.binarywang.wxpay.bean.media.ImageUploadResult;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.ComplaintService;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.v3.WechatPayUploadHttpPost;
import com.github.binarywang.wxpay.v3.util.RsaCryptoUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.RequiredArgsConstructor;
import org.apache.commons.codec.digest.DigestUtils;

import javax.crypto.BadPaddingException;
import java.io.*;
import java.net.URI;
import java.util.List;

/**
 * 
 * 消费者投诉2.0 实现.
 * Created by jmdhappy on 2022/3/19.
 * 
* * @author jmdhappy */ @RequiredArgsConstructor public class ComplaintServiceImpl implements ComplaintService { private static final Gson GSON = new GsonBuilder().create(); private final WxPayService payService; @Override public ComplaintResult queryComplaints(ComplaintRequest request) throws WxPayException, BadPaddingException { String url = String.format("%s/v3/merchant-service/complaints-v2?limit=%d&offset=%d&begin_date=%s&end_date=%s&complainted_mchid=%s", this.payService.getPayBaseUrl(), request.getLimit(), request.getOffset(), request.getBeginDate(), request.getEndDate(), request.getComplaintedMchid()); String response = this.payService.getV3(url); ComplaintResult complaintResult = GSON.fromJson(response, ComplaintResult.class); List data = complaintResult.getData(); for (ComplaintDetailResult complaintDetailResult : data) { // 对手机号进行解密操作 if (complaintDetailResult.getPayerPhone() != null) { String payerPhone = RsaCryptoUtil.decryptOAEP(complaintDetailResult.getPayerPhone(), this.payService.getConfig().getPrivateKey()); complaintDetailResult.setPayerPhone(payerPhone); } } return complaintResult; } @Override public ComplaintDetailResult getComplaint(ComplaintDetailRequest request) throws WxPayException, BadPaddingException { String url = String.format("%s/v3/merchant-service/complaints-v2/%s", this.payService.getPayBaseUrl(), request.getComplaintId()); String response = this.payService.getV3(url); ComplaintDetailResult result = GSON.fromJson(response, ComplaintDetailResult.class); // 对手机号进行解密操作 if (result.getPayerPhone() != null) { String payerPhone = RsaCryptoUtil.decryptOAEP(result.getPayerPhone(), this.payService.getConfig().getPrivateKey()); result.setPayerPhone(payerPhone); } return result; } @Override public NegotiationHistoryResult queryNegotiationHistorys(NegotiationHistoryRequest request) throws WxPayException { String url = String.format("%s/v3/merchant-service/complaints-v2/%s/negotiation-historys?limit=%d&offset=%d", this.payService.getPayBaseUrl(), request.getComplaintId(), request.getLimit(), request.getOffset()); String response = this.payService.getV3(url); return GSON.fromJson(response, NegotiationHistoryResult.class); } @Override public ComplaintNotifyUrlResult addComplaintNotifyUrl(ComplaintNotifyUrlRequest request) throws WxPayException { String url = String.format("%s/v3/merchant-service/complaint-notifications", this.payService.getPayBaseUrl()); String response = this.payService.postV3(url, GSON.toJson(request)); return GSON.fromJson(response, ComplaintNotifyUrlResult.class); } @Override public ComplaintNotifyUrlResult getComplaintNotifyUrl() throws WxPayException { String url = String.format("%s/v3/merchant-service/complaint-notifications", this.payService.getPayBaseUrl()); String response = this.payService.getV3(url); return GSON.fromJson(response, ComplaintNotifyUrlResult.class); } @Override public ComplaintNotifyUrlResult updateComplaintNotifyUrl(ComplaintNotifyUrlRequest request) throws WxPayException { String url = String.format("%s/v3/merchant-service/complaint-notifications", this.payService.getPayBaseUrl()); String response = this.payService.putV3(url, GSON.toJson(request)); return GSON.fromJson(response, ComplaintNotifyUrlResult.class); } @Override public void deleteComplaintNotifyUrl() throws WxPayException { String url = String.format("%s/v3/merchant-service/complaint-notifications", this.payService.getPayBaseUrl()); this.payService.deleteV3(url); } @Override public void submitResponse(ResponseRequest request) throws WxPayException { String url = String.format("%s/v3/merchant-service/complaints-v2/%s/response", this.payService.getPayBaseUrl(), request.getComplaintId()); // 上面url已经含有complaintId,这里设置为空,避免在body中再次传递,否则微信会报错 request.setComplaintId(null); this.payService.postV3(url, GSON.toJson(request)); } @Override public void complete(CompleteRequest request) throws WxPayException { String url = String.format("%s/v3/merchant-service/complaints-v2/%s/complete", this.payService.getPayBaseUrl(), request.getComplaintId()); // 上面url已经含有complaintId,这里设置为空,避免在body中再次传递,否则微信会报错 request.setComplaintId(null); this.payService.postV3(url, GSON.toJson(request)); } @Override public ImageUploadResult uploadResponseImage(File imageFile) throws WxPayException, IOException { String url = String.format("%s/v3/merchant-service/images/upload", this.payService.getPayBaseUrl()); try (FileInputStream s1 = new FileInputStream(imageFile)) { String sha256 = DigestUtils.sha256Hex(s1); try (InputStream s2 = new FileInputStream(imageFile)) { WechatPayUploadHttpPost request = new WechatPayUploadHttpPost.Builder(URI.create(url)) .withImage(imageFile.getName(), sha256, s2) .build(); String result = this.payService.postV3(url, request); return ImageUploadResult.fromJson(result); } } } @Override public ImageUploadResult uploadResponseImage(InputStream inputStream, String fileName) throws WxPayException, IOException { String url = String.format("%s/v3/merchant-service/images/upload", this.payService.getPayBaseUrl()); try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) { //文件大小不能超过2M byte[] buffer = new byte[2048]; int len; while ((len = inputStream.read(buffer)) > -1) { bos.write(buffer, 0, len); } bos.flush(); byte[] data = bos.toByteArray(); String sha256 = DigestUtils.sha256Hex(data); WechatPayUploadHttpPost request = new WechatPayUploadHttpPost.Builder(URI.create(url)) .withImage(fileName, sha256, new ByteArrayInputStream(data)) .build(); String result = this.payService.postV3(url, request); return ImageUploadResult.fromJson(result); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy