From abf9119f0d8026d456090aef54546d763c2d30d0 Mon Sep 17 00:00:00 2001 From: zhubaomin <zhubaomin> Date: 星期二, 22 十月 2024 15:16:38 +0800 Subject: [PATCH] 2024-10-22 朱宝民 农户与微信解绑接口 --- pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCtrl.java | 20 ++ pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/PipIrrSellApplication.java | 2 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentSv.java | 24 +++ pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWechatpayMapper.xml | 142 ++++++++++++++++++++ pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWechatpay.java | 68 +++++++++ pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWechatpayMapper.java | 33 ++++ pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/wechatpay/PayInfo.java | 1 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentCtrl.java | 38 ++++- pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/dto/Wechatpay.java | 53 +++++++ pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientSv.java | 9 + 10 files changed, 380 insertions(+), 10 deletions(-) diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWechatpayMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWechatpayMapper.java new file mode 100644 index 0000000..6de37dd --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWechatpayMapper.java @@ -0,0 +1,33 @@ +package com.dy.pipIrrGlobal.daoSe; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dy.pipIrrGlobal.pojoSe.SeWechatpay; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author ZhuBaoMin + * @date 2024-10-22 11:18 + * @LastEditTime 2024-10-22 11:18 + * @Description + */ +@Mapper +public interface SeWechatpayMapper extends BaseMapper<SeWechatpay> { + int deleteByPrimaryKey(Long id); + + int insert(SeWechatpay record); + + int insertSelective(SeWechatpay record); + + SeWechatpay selectByPrimaryKey(Long id); + + int updateByPrimaryKeySelective(SeWechatpay record); + + int updateByPrimaryKey(SeWechatpay record); + + /** + * 鏍规嵁AppId鑾峰彇寰俊鏀粯瀵硅薄 + * @param appId + * @return + */ + SeWechatpay getWechatpayByAppId(String appId); +} \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWechatpay.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWechatpay.java new file mode 100644 index 0000000..262fa18 --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWechatpay.java @@ -0,0 +1,68 @@ +package com.dy.pipIrrGlobal.pojoSe; + +/** + * @author ZhuBaoMin + * @date 2024-10-22 11:18 + * @LastEditTime 2024-10-22 11:18 + * @Description 寰俊鏀粯淇℃伅瀹炰綋绫� + */ + +import com.alibaba.fastjson2.annotation.JSONField; +import com.alibaba.fastjson2.writer.ObjectWriterImplToString; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dy.common.po.BaseEntity; +import lombok.*; + +@TableName(value="se_wechatpay", autoResultMap = true) +@Data +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class SeWechatpay implements BaseEntity { + public static final long serialVersionUID = 202410221122001L; + + /** + * 涓婚敭 + */ + @JSONField(serializeUsing= ObjectWriterImplToString.class) + @TableId(type = IdType.INPUT) + private Long id; + + /** + * 灏忕▼搴忓敮涓�鏍囪瘑 + */ + private String appId; + + /** + * 灏忕▼搴忕閽� + */ + private String appSecret; + + /** + * 鍟嗘埛鍙� + */ + private String mchId; + + /** + * 绉橀挜key + */ + private String mchKey; + + /** + * API璇佷功搴忓垪鍙� + */ + private String serialNo; + + /** + * 鏀粯缁撴灉閫氱煡url + */ + private String notifyUrl; + + /** + * 澶囨敞淇℃伅 + */ + private String remarks; +} \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWechatpayMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWechatpayMapper.xml new file mode 100644 index 0000000..3d748ef --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWechatpayMapper.xml @@ -0,0 +1,142 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.dy.pipIrrGlobal.daoSe.SeWechatpayMapper"> + <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoSe.SeWechatpay"> + <!--@mbg.generated--> + <!--@Table se_wechatpay--> + <id column="id" jdbcType="BIGINT" property="id" /> + <result column="app_id" jdbcType="VARCHAR" property="appId" /> + <result column="app_secret" jdbcType="VARCHAR" property="appSecret" /> + <result column="mch_id" jdbcType="VARCHAR" property="mchId" /> + <result column="mch_key" jdbcType="VARCHAR" property="mchKey" /> + <result column="serial_no" jdbcType="VARCHAR" property="serialNo" /> + <result column="remarks" jdbcType="VARCHAR" property="remarks" /> + <result column="notify_url" jdbcType="VARCHAR" property="notifyUrl" /> + </resultMap> + <sql id="Base_Column_List"> + <!--@mbg.generated--> + id, app_id, app_secret, mch_id, mch_key, serial_no, remarks, notify_url + </sql> + <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> + <!--@mbg.generated--> + select + <include refid="Base_Column_List" /> + from se_wechatpay + where id = #{id,jdbcType=BIGINT} + </select> + <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> + <!--@mbg.generated--> + delete from se_wechatpay + where id = #{id,jdbcType=BIGINT} + </delete> + <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWechatpay"> + <!--@mbg.generated--> + insert into se_wechatpay (id, app_id, app_secret, + mch_id, mch_key, serial_no, + remarks, notify_url) + values (#{id,jdbcType=BIGINT}, #{appId,jdbcType=VARCHAR}, #{appSecret,jdbcType=VARCHAR}, + #{mchId,jdbcType=VARCHAR}, #{mchKey,jdbcType=VARCHAR}, #{serialNo,jdbcType=VARCHAR}, + #{remarks,jdbcType=VARCHAR}, #{notifyUrl,jdbcType=VARCHAR}) + </insert> + <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWechatpay"> + <!--@mbg.generated--> + insert into se_wechatpay + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null"> + id, + </if> + <if test="appId != null"> + app_id, + </if> + <if test="appSecret != null"> + app_secret, + </if> + <if test="mchId != null"> + mch_id, + </if> + <if test="mchKey != null"> + mch_key, + </if> + <if test="serialNo != null"> + serial_no, + </if> + <if test="remarks != null"> + remarks, + </if> + <if test="notifyUrl != null"> + notify_url, + </if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null"> + #{id,jdbcType=BIGINT}, + </if> + <if test="appId != null"> + #{appId,jdbcType=VARCHAR}, + </if> + <if test="appSecret != null"> + #{appSecret,jdbcType=VARCHAR}, + </if> + <if test="mchId != null"> + #{mchId,jdbcType=VARCHAR}, + </if> + <if test="mchKey != null"> + #{mchKey,jdbcType=VARCHAR}, + </if> + <if test="serialNo != null"> + #{serialNo,jdbcType=VARCHAR}, + </if> + <if test="remarks != null"> + #{remarks,jdbcType=VARCHAR}, + </if> + <if test="notifyUrl != null"> + #{notifyUrl,jdbcType=VARCHAR}, + </if> + </trim> + </insert> + <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWechatpay"> + <!--@mbg.generated--> + update se_wechatpay + <set> + <if test="appId != null"> + app_id = #{appId,jdbcType=VARCHAR}, + </if> + <if test="appSecret != null"> + app_secret = #{appSecret,jdbcType=VARCHAR}, + </if> + <if test="mchId != null"> + mch_id = #{mchId,jdbcType=VARCHAR}, + </if> + <if test="mchKey != null"> + mch_key = #{mchKey,jdbcType=VARCHAR}, + </if> + <if test="serialNo != null"> + serial_no = #{serialNo,jdbcType=VARCHAR}, + </if> + <if test="remarks != null"> + remarks = #{remarks,jdbcType=VARCHAR}, + </if> + <if test="notifyUrl != null"> + notify_url = #{notifyUrl,jdbcType=VARCHAR}, + </if> + </set> + where id = #{id,jdbcType=BIGINT} + </update> + <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWechatpay"> + <!--@mbg.generated--> + update se_wechatpay + set app_id = #{appId,jdbcType=VARCHAR}, + app_secret = #{appSecret,jdbcType=VARCHAR}, + mch_id = #{mchId,jdbcType=VARCHAR}, + mch_key = #{mchKey,jdbcType=VARCHAR}, + serial_no = #{serialNo,jdbcType=VARCHAR}, + remarks = #{remarks,jdbcType=VARCHAR}, + notify_url = #{notifyUrl,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + </update> + + <!--鏍规嵁AppId鑾峰彇寰俊鏀粯瀵硅薄--> + <select id="getWechatpayByAppId" resultType="com.dy.pipIrrGlobal.pojoSe.SeWechatpay"> + SELECT * FROM se_wechatpay WHERE app_id = #{appId} + </select> +</mapper> \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/PipIrrSellApplication.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/PipIrrSellApplication.java index 3553183..4da7234 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/PipIrrSellApplication.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/PipIrrSellApplication.java @@ -27,7 +27,7 @@ }) } ) -@MapperScan({"com.dy.pipIrrGlobal.daoSe", "com.dy.pipIrrGlobal.daoBa", "com.dy.pipIrrGlobal.daoPr", "com.dy.pipIrrGlobal.daoRm"}) +@MapperScan({"com.dy.pipIrrGlobal.daoSe", "com.dy.pipIrrGlobal.daoBa", "com.dy.pipIrrGlobal.daoPr", "com.dy.pipIrrGlobal.daoRm", "com.dy.pipIrrGlobal.daoFi"}) public class PipIrrSellApplication { public static void main(String[] args) { diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentCtrl.java index ce1fb29..bb69aa9 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentCtrl.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentCtrl.java @@ -19,10 +19,7 @@ import com.dy.pipIrrSell.virtualCard.enums.LastOperateENUM; import com.dy.pipIrrSell.virtualCard.enums.RefundItemStateENUM; import com.dy.pipIrrSell.wallet.enums.RefundStatusENUM; -import com.dy.pipIrrSell.wechatpay.dto.Code2Session; -import com.dy.pipIrrSell.wechatpay.dto.DtoOrder; -import com.dy.pipIrrSell.wechatpay.dto.NotifyResource; -import com.dy.pipIrrSell.wechatpay.dto.OrderNotify; +import com.dy.pipIrrSell.wechatpay.dto.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -50,10 +47,7 @@ import java.security.SignatureException; import java.security.spec.InvalidKeySpecException; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; +import java.util.*; /** * @author ZhuBaoMin @@ -522,4 +516,32 @@ result.put("message", "鎴愬姛"); return result; } + + @PostMapping(path = "add_wechatpay", consumes = MediaType.APPLICATION_JSON_VALUE) + @Transactional(rollbackFor = Exception.class) + @SsoAop() + public BaseResponse<Boolean> addWechatpay(@RequestBody @Valid Wechatpay po, BindingResult bindingResult) { + if(bindingResult != null && bindingResult.hasErrors()){ + return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); + } + + if(paymentSv.getWechatpayByAppId(po.getAppId()) != null) { + return BaseResponseUtils.buildErrorMsg("璇ュ井淇℃敮浠樹俊鎭凡缁忓瓨鍦�"); + } + + SeWechatpay seWechatpay = new SeWechatpay(); + seWechatpay.setAppId(po.getAppId()); + seWechatpay.setAppSecret(po.getAppSecret()); + seWechatpay.setMchId(po.getMchId()); + seWechatpay.setMchKey(po.getMchKey()); + seWechatpay.setSerialNo(po.getSerialNo()); + seWechatpay.setNotifyUrl(po.getNotifyUrl()); + seWechatpay.setRemarks(po.getRemarks()); + + Long rec = Optional.ofNullable(paymentSv.addWechatpay(seWechatpay)).orElse(0L); + if(rec == 0) { + return BaseResponseUtils.buildFail("娣诲姞寰俊鏀粯淇℃伅澶辫触"); + } + return BaseResponseUtils.buildSuccess(true) ; + } } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentSv.java index 2dce1c1..deddebf 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentSv.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentSv.java @@ -2,8 +2,10 @@ import com.dy.pipIrrGlobal.daoSe.SeOpenIdMapper; import com.dy.pipIrrGlobal.daoSe.SeVcRechargeMapper; +import com.dy.pipIrrGlobal.daoSe.SeWechatpayMapper; import com.dy.pipIrrGlobal.pojoSe.SeOpenId; import com.dy.pipIrrGlobal.pojoSe.SeVcRecharge; +import com.dy.pipIrrGlobal.pojoSe.SeWechatpay; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -24,6 +26,9 @@ @Autowired private SeOpenIdMapper seOpenIdMapper; + @Autowired + private SeWechatpayMapper seWechatpayMapper; + /** * 鏍规嵁鐧诲綍鎬両D鑾峰彇鐧诲綍鎬佸璞� * @param sessionId @@ -42,4 +47,23 @@ seVcRechargeMapper.insert(po); return po.getId(); } + + /** + * 娣诲姞寰俊鏀粯淇℃伅 + * @param po + * @return + */ + Long addWechatpay(SeWechatpay po) { + seWechatpayMapper.insert(po); + return po.getId(); + } + + /** + * 鏍规嵁AppId鑾峰彇寰俊鏀粯瀵硅薄 + * @param appId + * @return + */ + SeWechatpay getWechatpayByAppId(String appId) { + return seWechatpayMapper.getWechatpayByAppId(appId); + } } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/dto/Wechatpay.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/dto/Wechatpay.java new file mode 100644 index 0000000..d9d0e5c --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/dto/Wechatpay.java @@ -0,0 +1,53 @@ +package com.dy.pipIrrSell.wechatpay.dto; + +import lombok.Data; +import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank; + +/** + * @author ZhuBaoMin + * @date 2024-10-22 11:31 + * @LastEditTime 2024-10-22 11:31 + * @Description 寰俊鏀粯浼犲叆瀵硅薄 + */ + +@Data +public class Wechatpay { + public static final long serialVersionUID = 202404220954001L; + + /** + * 灏忕▼搴忓敮涓�鏍囪瘑 + */ + @NotBlank(message = "灏忕▼搴忓敮涓�鏍囪瘑涓嶈兘涓虹┖") + private String appId; + + /** + * 灏忕▼搴忕閽� + */ + @NotBlank(message = "灏忕▼搴忕閽ヤ笉鑳戒负绌�") + private String appSecret; + + /** + * 鍟嗘埛鍙� + */ + private String mchId; + + /** + * 绉橀挜key + */ + private String mchKey; + + /** + * API璇佷功搴忓垪鍙� + */ + private String serialNo; + + /** + * 鏀粯缁撴灉閫氱煡url + */ + private String notifyUrl; + + /** + * 澶囨敞淇℃伅 + */ + private String remarks; +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCtrl.java index 01bb50a..b01084c 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCtrl.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCtrl.java @@ -216,6 +216,26 @@ } /** + * 瑙g粦鍐滄埛涓庡井淇$殑缁戝畾锛屾牴鎹畇essionId鍒犻櫎缁戝畾璁板綍 + * @param sessionId + * @return + */ + @PostMapping(path = "unbind") + @Transactional(rollbackFor = Exception.class) + public BaseResponse<Boolean> unbindWechat(@RequestParam("sessionId")Long sessionId) { + if(sessionId == null || sessionId <=0) { + return BaseResponseUtils.buildErrorMsg("sessionId鏃犳晥"); + } + + Integer rec = clientSv.unbindWechat(sessionId); + if(rec == null || rec == 0) { + return BaseResponseUtils.buildErrorMsg("sessionId閿欒"); + } + + return BaseResponseUtils.buildSuccess(); + } + + /** * 鑾峰彇鍐滄埛鍩烘湰淇℃伅锛屽皬绋嬪簭棣栭〉浣跨敤 * @param sessionId * @return diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientSv.java index fbe5234..c5e3adb 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientSv.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientSv.java @@ -73,4 +73,13 @@ public VoClientWechat getSimpleClientInfo(Long sessionId, String openId) { return seClientMapper.getSimpleClientInfo(sessionId, openId); } + + /** + * 瑙g粦鍐滄埛涓庡井淇$殑缁戝畾锛屾牴鎹畇essionId鍒犻櫎缁戝畾璁板綍 + * @param sessionId + * @return + */ + public Integer unbindWechat(Long sessionId) { + return seOpenIdMapper.deleteByPrimaryKey(sessionId); + } } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/wechatpay/PayInfo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/wechatpay/PayInfo.java index 9a87cee..a07604b 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/wechatpay/PayInfo.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/wechatpay/PayInfo.java @@ -30,7 +30,6 @@ /** * 缁熶竴涓嬪崟API */ - //public static String orderUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder"; public static String orderUrl = "https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi"; /** -- Gitblit v1.8.0