微信现金红包的接入玩法

一,平台配置

1.获取商户id

  微信现金红包的接入玩法_第1张图片

2.获取开发者密钥 在API安全里

微信现金红包的接入玩法_第2张图片

3.获取证书

微信现金红包的接入玩法_第3张图片

4.现金红包配置

微信现金红包的接入玩法_第4张图片

5.绑定公众号

微信现金红包的接入玩法_第5张图片

二,进行开发流程

1.调用第三方开发demo,pom引入:com.github.binarywang

            com.github.binarywang

            weixin-java-mp

            2.5.0

2初始配置文件

@ApplicationScoped
public class WxMpServiceFactory {

	@Inject
	private Logger logger;
	
	@Inject
	@ConfigProperty(name = "wx.pay.appid")
	private String appid;// 设置微信公众号的APPID

	@Inject
	@ConfigProperty(name = "wx.pay.apiclientcert")
	private String apiClientCertUrl;//证书所在路径
	
	@Inject
	@ConfigProperty(name = "wx.pay.redpack.partnerid")
	private String partnerId;//商铺id
	
	@Inject
	@ConfigProperty(name = "wx.pay.redpack.partnerkey")
	private String partnerkey;//商铺密钥

	private WxMpService wxMpService;
	
	@Produces
	public WxMpService create() {
		return wxMpService;
	}
	
	@PostConstruct
	public void init() {
		wxMpService = new WxMpServiceImpl();
		
		logger.info("WxMpPlusInMemoryConfigStorage 对象初始化开始");
		logger.info("证书所在路径:" + apiClientCertUrl);
		WxMpInMemoryConfigStorage config = new WxMpInMemoryConfigStorage();
		config.setAppId(appid);
		config.setPartnerId(partnerId);
		config.setPartnerKey(partnerkey);
		config.setSslContextFilePath(apiClientCertUrl);
		wxMpService.setWxMpConfigStorage(config);
        logger.info("WxMpPlusInMemoryConfigStorage 对象初始化结束");
	}
}

3查询现金红包状态方式

 

 /**
   * 查询当前发送的订单状态,并更到数据库,记录操作日志
   */
  private void queryRedpack(String mchBillNo) {
    WxMpPayService service = wxMpServiceImpl.getPayService();
    WxPayRedpackQueryResult wxPayRedpackQueryResult = new WxPayRedpackQueryResult();
    try{
      wxPayRedpackQueryResult = service.queryRedpack(mchBillNo);
      this.updateRedPacketDetails(wxPayRedpackQueryResult);
      this.insertRedPacketLog(wxPayRedpackQueryResult);
    } catch (WxErrorException e) {
      String message = e.getMessage();
      if (message.indexOf("NOT_FOUND") >= 0) {
        RedPacketActDetails redPacketActDetail = new RedPacketActDetails();
        redPacketActDetail.setId(this.actDetailsId.toString());
        redPacketActDetail.setSendStatus(RedPacketActDetails.REDPACKET_STATUS_FAILED);
        redPacketActDetailsMapper.updateRedPacketActDetails(redPacketActDetail);
      }
      logger.info("==pay====>>>查询失败:" + e.getMessage());
    }

  }

现金红包发送

  /**
   * 红包发送
   * 
   * @param mchBillNo
   *            商铺订单号
   * @param openId
   *            用户的openId
   * @param sendName
   *            红包发送主题名称
   * @param totalAmount
   *            付款金额 限制 大于100 小于4999*100,单位分
   * @param wishing
   *            包祝福语
   * @param actName
   *            活动名称
   * @param remark
   *            备注
   * @param product
   *            场景id
   * @param clientIp
   *            请求的客户端Ip地址
   * 
   * @author ICG-DL-JXC
   * @date 2017-03-14
   */
  private WxPaySendRedpackResult sendRedPack(String mchBillNo, String openId, String sendName, int totalAmount,
      String wishing, String actName, String remark, String product, String clientIp) {
    WxMpPayService service = wxMpServiceImpl.getPayService();
    WxPaySendRedpackRequest req = new WxPaySendRedpackRequest();

    try {
      req.setMchBillNo(mchBillNo); // 商户订单号
      req.setReOpenid(openId); // 用户的openid
      req.setSendName(sendName); // 红包发送者名称
      req.setTotalAmount(totalAmount);// 付款金额 限制 大于100 小于200*100,单位分
      req.setTotalNum(1); // 红包发放人数
      req.setWishing(wishing); // 包祝福语
      req.setActName(actName); // 活动名称
      req.setRemark(remark); // 备注
      req.setSceneId(product); // 场景id
      req.setClientIp(clientIp); // 请求的客户端Ip地址

      WxPaySendRedpackResult result = service.sendRedpack(req);
      logger.info(ReflectionToStringBuilder.toString(result));
      return result;
    } catch (Exception e) {
      String message = e.getMessage();
      logger.info("==pay====>>>发送失败:" + message);
      RedPacketActDetails redPacketActDetail = new RedPacketActDetails();
      redPacketActDetail.setId(this.actDetailsId.toString());
      if (message.indexOf("PROCESSING") > 0 || message.indexOf("SYSTEMERROR") > 0) {
        redPacketActDetail.setSendStatus(RedPacketActDetails.REDPACKET_STATUS_SENDING);
      } else {
        redPacketActDetail.setId(this.actDetailsId.toString());
        redPacketActDetail.setSendStatus(RedPacketActDetails.REDPACKET_STATUS_FAILED);
      }
      // JXC 2017-07-29 如果发送失败,把原因存入DB中
      if(message.length() > 500) {
    	  message = message.substring(0, 500) + "...";
      }
      redPacketActDetail.setRemark(message);
      redPacketActDetailsMapper.updateRedPacketActDetails(redPacketActDetail);
    }
    return null;
  }

 

三,相关文档

https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1(现金红包文档)

https://github.com/chanjarster/weixin-java-tools(第三方工具类)

https://pay.weixin.qq.com/index.php/core/home/login(微信商户平台)

 

 

你可能感兴趣的:(微信开发,java)