java微信公众号支付开发之现金红包

我们先来看看公众号发放现金红包的效果:

需要调用商户平台的接口,接口发放规则如下:

1.发送频率限制——默认1800/min
2.发送个数上限——按照默认1800/min算
3.金额上限——根据传入场景id不同默认上限不同,可以在商户平台产品设置进行设置和申请,最大不大于4999元/个
4.其他的“量”上的限制还有哪些?——用户当天的领取上限次数,默认是10
5.如果量上满足不了我们的需求,如何提高各个上限?——金额上限和用户当天领取次数上限可以在商户平台进行设置
注意-红包金额大于200时,请求参数scene_id必传,参数说明见下文。
注意2-根据监管要求,新申请商户号使用现金红包需要满足两个条件:1、入驻时间超过90天 2、连续正常交易30天。

请求Url https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack
是否需要证书 是(证书及使用说明详见商户证书)
请求方式 POST

请求数据示例:

<xml>

<sign><![CDATA[E1EE61A91C8E90F299DE6AE075D60A2D]]></sign>

<mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno>

<mch_id><![CDATA[888]]></mch_id>

<wxappid><![CDATA[wxcbda96de0b165486]]></wxappid>
<send_name><![CDATA[send_name]]></send_name>
<re_openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]></re_openid>
<total_amount><![CDATA[200]]></total_amount>
<total_num><![CDATA[1]]></total_num>
<wishing><![CDATA[恭喜发财]]></wishing>

<client_ip><![CDATA[127.0.0.1]]></client_ip>
<act_name><![CDATA[新年红包]]></act_name>
<remark><![CDATA[新年红包]]></remark>
<scene_id><![CDATA[PRODUCT_2]]></scene_id>
<consume_mch_id><![CDATA[10000097]]></consume_mch_id>
<nonce_str><![CDATA[50780e0cca98c8c8e814883e5caa672e]]></nonce_str>

<risk_info>posttime%3d123123412%26clientversion%3d234134%26mobile%3d122344545%26deviceid%3dIOS</risk_info>

</xml>

接口需要调用商户平台的证书,证书需要去商户平台下载:

然后在接口中使用证书,首先我们新建一个WeixinSSL 类

@Component
public class WeiXinSSL {

  /**
   * 证书类型
   */
  @Value("${werchant.storekey}")
  private String storekey;

  /**
   * 文件路径
   */
  @Value("${werchant.ssLfile}")
  private String ssLfile;

  /**
   * 商户号
   */
  @Value("${werchant.merchantNumber}")
  private String merchantNumber;

  public String getStorekey() {
    return storekey;
  }

  public void setStorekey(String storekey) {
    this.storekey = storekey;
  }

  public String getSsLfile() {
    return ssLfile;
  }

  public void setSsLfile(String ssLfile) {
    this.ssLfile = ssLfile;
  }

  public String getMerchantNumber() {
    return merchantNumber;
  }

  public void setMerchantNumber(String merchantNumber) {
    this.merchantNumber = merchantNumber;
  }
}

封装HttpClientSSL 类实现 https 请求加证书:

@Component
public class HttpClientSSL {

  @Autowired
  private WeiXinSSL weiXinSSL;

  // 请求超时时间(毫秒) 5秒
  public static RequestConfig requestConfig;

  // 响应超时时间(毫秒) 60秒
  public static int HTTP_RESPONSE_TIMEOUT = 60 * 1000;

  // httpClient字符编码
  public static String encoding = "UTF-8";

  public static RequestConfig getRequestConfig() {
    return RequestConfig.custom().setConnectTimeout(5 * 1000)
        .setConnectionRequestTimeout(HTTP_RESPONSE_TIMEOUT).build();
  }

  public static void setRequestConfig(RequestConfig requestConfig) {
    HttpClientSSL.requestConfig = requestConfig;
  }

  /**
   * https请求伪造证书
   * @return
   */
  public CloseableHttpClient defaultSSLClient() {
    SSLContext sslContext = null;
    try {
      new SSLContextBuilder().loadTrustMaterial(null,new TrustStrategy(){
        @Override
        public boolean isTrusted(X509Certificate[] chain, String authType)
            throws java.security.cert.CertificateException {
          return false;
        }
      });
    } catch (NoSuchAlgorithmException | KeyStoreException e) {
      e.printStackTrace();
    }
    SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslContext);
    return HttpClients.custom().setSSLSocketFactory(factory).build();
  }

  /**
   * https请求加证书
   * @return
   */
  public CloseableHttpClient defaultSSLClientFile() {
    if (this.weiXinSSL == null){
      return this.defaultSSLClient();
    }
    FileInputStream inputStream = null;
    KeyStore keyStore = null;
    try {
      // ssl类型
      keyStore = KeyStore.getInstance(weiXinSSL.getStorekey());
      // ssl文件
      inputStream = new FileInputStream(weiXinSSL.getSsLfile());
      // 设置ssl密码
      keyStore.load(inputStream,weiXinSSL.getMerchantNumber().toCharArray());
    } catch (KeyStoreException | NoSuchAlgorithmException | CertificateException | IOException e1) {
      e1.printStackTrace();
    } finally {
      try {
        inputStream.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    SSLContext sslContext = null;
    try {
      sslContext = SSLContexts.custom().loadKeyMaterial(keyStore,weiXinSSL.getMerchantNumber().toCharArray()).build();
    } catch (UnrecoverableKeyException | NoSuchAlgorithmException | KeyStoreException | KeyManagementException e) {
      e.printStackTrace();
    }

    SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslContext, new String[] { "TLSv1" }, null,
        SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
    return HttpClients.custom().setSSLSocketFactory(factory).build();
  }

  /**
   * 封装发送请求的方法
   * @throws UnsupportedEncodingException
   */
  public String send(String url, String data, CloseableHttpClient closeableHttpClient)
      throws UnsupportedEncodingException {

    CloseableHttpClient client = closeableHttpClient;
    HttpPost httpPost = new HttpPost(URLDecoder.decode(url, encoding));
    httpPost.addHeader("Connection", "keep-alive");
    httpPost.addHeader("Accept", "*/*");
    httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
    httpPost.addHeader("Host", "api.mch.weixin.qq.com");
    httpPost.addHeader("X-Requested-With", "XMLHttpRequest");
    httpPost.addHeader("Cache-Control", "max-age=0");
    httpPost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
    httpPost.setConfig(this.getRequestConfig());// 设置超时时间
    CloseableHttpResponse response = null;

    // 参数放入
    StringEntity entity = new StringEntity(data, encoding);
    entity.setContentEncoding(encoding);
    entity.setContentType("application/xml");
    httpPost.setEntity(entity);

    try {
      response = client.execute(httpPost);
      if (response.getStatusLine().getStatusCode() == 200) {
        HttpEntity httpEntity = (HttpEntity) response.getEntity();
        if (response != null) {
          return EntityUtils.toString(httpEntity,encoding);
        }
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    return null;
  }

}

这样我们就封装了一个https请求加证书的实体类,接下来我们生成请求微信红包接口:
https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack 的参数签名:

/**
* 红包参数实体类
 * @throws UnsupportedEncodingException
 */
@Component
public class SendRedPack implements Serializable{

  /**
   *
   */
  private static final long serialVersionUID = -1000489228099916099L;

  private String nonce_str;// 随机字符串
  private String sign;// 签名
  private String mch_billno;// 商户订单号
  private String mch_id;// 商户号
  private String wxappid;// 公众账号
  private String send_name;// 商户名称
  private String re_openid;// 用户
  private int total_amount;// 付款金额 单位:分
  private int total_num;// 红包发放总人数
  private String wishing;// 红包祝福语
  private String client_ip;// Ip地址
  private String act_name;// 活动名称
  private String remark;// 备注
  public String getNonce_str() {
    return nonce_str;
  }
  public void setNonce_str(String nonce_str) {
    this.nonce_str = nonce_str;
  }
  public String getSign() {
    return sign;
  }
  public void setSign(String sign) {
    this.sign = sign;
  }
  public String getMch_billno() {
    return mch_billno;
  }
  public void setMch_billno(String mch_billno) {
    this.mch_billno = mch_billno;
  }
  public String getMch_id() {
    return mch_id;
  }
  public void setMch_id(String mch_id) {
    this.mch_id = mch_id;
  }
  public String getWxappid() {
    return wxappid;
  }
  public void setWxappid(String wxappid) {
    this.wxappid = wxappid;
  }
  public String getSend_name() {
    return send_name;
  }
  public void setSend_name(String send_name) {
    this.send_name = send_name;
  }
  public String getRe_openid() {
    return re_openid;
  }
  public void setRe_openid(String re_openid) {
    this.re_openid = re_openid;
  }
  public int getTotal_amount() {
    return total_amount;
  }
  public void setTotal_amount(int total_amount) {
    this.total_amount = total_amount;
  }
  public int getTotal_num() {
    return total_num;
  }
  public void setTotal_num(int total_num) {
    this.total_num = total_num;
  }
  public String getWishing() {
    return wishing;
  }
  public void setWishing(String wishing) {
    this.wishing = wishing;
  }
  public String getClient_ip() {
    return client_ip;
  }
  public void setClient_ip(String client_ip) {
    this.client_ip = client_ip;
  }
  public String getAct_name() {
    return act_name;
  }
  public void setAct_name(String act_name) {
    this.act_name = act_name;
  }
  public String getRemark() {
    return remark;
  }
  public void setRemark(String remark) {
    this.remark = remark;
  }
}

接下来是发送红包的控制器:

/**
 * 领红包控制器
 * @author zengliang
 */
@Controller
@RequestMapping(value="/redenveLopesReceive")
public class RedEnvelopesReceiveController {

  //微信唯一标识
  @Value("${weixin.appid}")
  private String appid;

  //微信开发者密码标识
  @Value("${weixin.appsecret}")
  public String appsecret;

  @Autowired
  private SendRedPack sendredpack;

  @Autowired
  private HttpClientSSL httpclientssl;

  /**
   * 发送XML参数
   * @author zengliang
   */
  @ResponseBody
  @RequestMapping(value="/sendXml")
  public String sendXml(String openid,Long redenveLopes_id
      ,String mch_billno){
    RedenveLopes redenve = redenveLopesService.findOne(redenveLopes_id);

    XMLUtil xmlUtil= new XMLUtil();
    sendredpack.setAct_name(redenve.getAct_name());
    sendredpack.setNonce_str(xmlUtil.random());
    sendredpack.setRe_openid(openid);
    sendredpack.setClient_ip(redenve.getClient_ip());
    sendredpack.setMch_billno(mch_billno);
    sendredpack.setMch_id(redenve.getMch_id());
    String xx = redenve.getRemark();
    sendredpack.setRemark(StringUtils.isEmpty(xx) == false?xx:"空");
    sendredpack.setSend_name(redenve.getSend_name());
    sendredpack.setTotal_amount(redenve.getTotal_amount());
    sendredpack.setTotal_num(redenve.getTotal_num());
    sendredpack.setWishing(redenve.getWishing());
    sendredpack.setWxappid(redenve.getWxappidxx());
    //生成签名
    String params = this.createSendRedPackOrderSign(sendredpack,redenve.getStore_key());
    sendredpack.setSign(params);

    xmlUtil.xstream().alias("xml",sendredpack.getClass());
    //扩展xstream,使其支持CDATA块
    String requestXml = xmlUtil.xstream().toXML(sendredpack);

    String result;
    try {
      result = httpclientssl.send("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack",requestXml,httpclientssl.defaultSSLClientFile());
      System.out.println("成功返回值"+result);
      return result;
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
    return null;
  }

/**
   * 生成签名
   * @param redPack
   * @return
   */
  public String createSendRedPackOrderSign(SendRedPack redPack,String storekey){
    StringBuffer sign = new StringBuffer();
    sign.append("act_name=").append(redPack.getAct_name());
    sign.append("&client_ip=").append(redPack.getClient_ip());
    sign.append("&mch_billno=").append(redPack.getMch_billno());
    sign.append("&mch_id=").append(redPack.getMch_id());
    sign.append("&nonce_str=").append(redPack.getNonce_str());
    sign.append("&re_openid=").append(redPack.getRe_openid());
    sign.append("&remark=").append(redPack.getRemark());
    sign.append("&send_name=").append(redPack.getSend_name());
    sign.append("&total_amount=").append(redPack.getTotal_amount());
    sign.append("&total_num=").append(redPack.getTotal_num());
    sign.append("&wishing=").append(redPack.getWishing());
    sign.append("&wxappid=").append(redPack.getWxappid());
    sign.append("&key=").append(storekey);
    return DigestUtils.md5Hex(sign.toString()).toUpperCase();
  }

}

然后我们需要用一个解析XML的工具类实现解析微信返回的XML

/**
 * 解析XML工具类
 * @author zengliang
 */
@Component
public class XMLUtil {

  /**
   * 解析微信返回的XML
   * @param xml
   * @return
   * @throws Exception
   */
  @SuppressWarnings("unchecked")
  public Map<String, String> parseXml(String xml)throws Exception {
    Map<String,String> map = new HashMap<String,String>();
    Document doc = null;
    try {
      doc = DocumentHelper.parseText(xml); // 将字符串转为XML
      Element rootElt = doc.getRootElement(); // 获取根节点
      List<Element> list = rootElt.elements();//获取根节点下所有节点
      for (Element element : list) { //遍历节点
        map.put(element.getName(), element.getText()); //节点的name为map的key,text为map的value
      }
    } catch (DocumentException e) {
      e.printStackTrace();
    } catch (Exception e) {
      e.printStackTrace();
    }
    return map;
  }

  /**
   * 扩展xstream,使其支持CDATA块
   */
   private XStream xstream = new XStream(new XppDriver(new NoNameCoder()) {
      @Override
      public HierarchicalStreamWriter createWriter(Writer out) {
          return new PrettyPrintWriter(out) {
          // 对所有xml节点的转换都增加CDATA标记
          boolean cdata = true;
          @Override
          @SuppressWarnings("rawtypes")
          public void startNode(String name, Class clazz) {
            super.startNode(name, clazz);
          }
          @Override
          public String encodeNode(String name) {
            return name;
          }
          @Override
          protected void writeText(QuickWriter writer, String text) {
            if (cdata) {
              writer.write("<![CDATA[");
              writer.write(text);
              writer.write("]]>");
            } else {
              writer.write(text);
            }
          }
          };
      }
   });
   private XStream inclueUnderlineXstream = new XStream(new DomDriver(null,new XmlFriendlyNameCoder("_-", "_")));
   public XStream getXstreamInclueUnderline() {
     return inclueUnderlineXstream;
   }

   public XStream xstream() {
     return xstream;
   }

   /**
   * 生成随机数
   * @return
   */
  public String random(){
    String random = UUID.randomUUID().toString().replace("-", "");
    return random;
  }
}

然后我们调用 sendXML 方法公众号就能向用户发送红包了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • java模拟微信抢红包的实例代码
  • java微信红包实现算法
  • java调用微信现金红包接口的心得与体会总结
  • Java微信支付-微信红包
  • java 微信随机红包算法代码实例
  • 微信随机生成红包金额算法java版
  • Java实现仿微信红包分配规则
(0)

相关推荐

  • 微信随机生成红包金额算法java版

    最近几年玩得最疯狂的应该是发红包了,尤其是过年的时候特别受欢迎,下面写了红包的随机算法,其实挺简单的,仅是提供一种思路,希望可以给大家一些启发. public class WxAlgorithm{ /** * @param moneySum 输入总金额 * @param redNum 输入红包数量 */ private static void wxAlgorithm(double moneySum, int redNum) { // 设置最小的金额 double moneyMin = 0.01;

  • java调用微信现金红包接口的心得与体会总结

    这几天看了下之前写的有关微信支付的博客,看的人还是挺多的,看了下留言不知道是因为博客写的不够细还是什么情况,大多都找我要源码,我觉得吧程序员还是需要有这么一个思考的过程,因此没直接给源码,俗话说"授人以鱼不如授人以渔".因此希望看文章的同时也花一点时间自己亲自敲一敲代码.好了废话不多说这次来分享微信现金红包接口的使用. 下面是微信开发文档对现金红包的介绍: 现金红包,是微信支付商户平台提供的营销工具之一,上线以来深受广大商户与用户的喜爱.商户可以通过本平台向微信支付用户发放现金红包.用

  • Java实现仿微信红包分配规则

    最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教. 算法介绍 一.红包金额限制 对于微信红包,我们知道没人随机的最小红包是1分,最大金额是200元,这里我们同样来设置红包的范围,下面代码我们统一金钱的单位为分. //最小红包额度 private static final int MINMONEY = 1; //最大红包额度 private static final int MAXMONEY = 200

  • java微信红包实现算法

    随着目前微信越来越火,所以研究微信的人也就越来越多,这不前一段时间,我们公司就让我做一个微信公众号中问卷调查发红包功能,经过一段时间的研究,把功能完成,里面主要的实现步骤都是按照微信公众号开发文档来的,很详细,在整个过程唯有红包算法需要仔细编写,因为毕竟涉及到钱,所以得小心,而且不仅微信中需要发红包,我们在做APP时可能也会遇到需要发红包的功能,所以这里列出红包的核心算法,供大家一起学习研究. public static List getRed(int number,float total,do

  • Java微信支付-微信红包

    微信红包的使用已经很广泛,本篇文章介绍了微信发红包的实例,需要有认证的公众号,且开通了微信支付,商户平台且开通了现金红包的权限即可. https://pay.weixin.qq.com商户登陆地址.选择查看营销中心的现金红包 https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1 现金红包的官网文档说明 先看几个图 简单的测试.前提需要你去商户平台先充值.不支持预支付.本文只是总结微信现金红包接口的调用与

  • java 微信随机红包算法代码实例

    前几天的一个晚上突然想到微信红包应该有一个随机算法,就自己试着写了下,也不知道对不对,看了看网上的说法,好像到现在为止官方也没有给出一个确切的算法,只好在这里献丑了,先贴出代码: public static double [] getMoney(double money, int num){ Random r = new Random(); DecimalFormat format = new DecimalFormat(".##"); double middle = Double.p

  • java模拟微信抢红包的实例代码

    java简单模拟微信抢红包功能,本例发100元红包,有10个人抢,为了尽可能的公平,每个人的红包金额都要随机(保证结果的不确定性,本例抢红包的次序与红包金额匹配也随机),就是不能出现部分红包偏大部分偏小的情况,在区间0~100上随机生成9个节点,加0和100共11个节点按从小到大排序,各节点之间的差值就是红包金额,保证了红包金额之和等于100. public static void main(String[] args) { // 发100元红包,10人抢 // TODO Auto-genera

  • java微信公众号支付开发之现金红包

    我们先来看看公众号发放现金红包的效果: 需要调用商户平台的接口,接口发放规则如下: 1.发送频率限制--默认1800/min 2.发送个数上限--按照默认1800/min算 3.金额上限--根据传入场景id不同默认上限不同,可以在商户平台产品设置进行设置和申请,最大不大于4999元/个 4.其他的"量"上的限制还有哪些?--用户当天的领取上限次数,默认是10 5.如果量上满足不了我们的需求,如何提高各个上限?--金额上限和用户当天领取次数上限可以在商户平台进行设置 注意-红包金额大于2

  • Java版微信公众号支付开发全过程

    一.微信官方文档微信支付开发流程(公众号支付) 首先我们到微信支付的官方文档的开发步骤部分查看一下需要的设置. [图片上传失败...(image-5eb825-1531014079742)] 因为微信支付需要较高的权限,只有认证了得服务号才有使用微信支付接口的权限,我们个人很难申请到,所以需要向其他朋友借用账号. 来到文档的业务流程部分,查看微信支付的流程(我觉得这个还是需要十分仔细的了解和查看的,这有助于你理解微信开发的流程). 然后,访问微信支付接口是要传递的参数很多,见统一下单 [图片上传

  • java微信公众号支付示例详解

    本文实例为大家分享了java微信公众号支付示例代码,供大家参考,具体内容如下 开始之前,先准备好:appid.商家号.商户密匙. 工具类: MD5Util.java package com.yiexpress.core.utils.wechat; import java.security.MessageDigest; /** * MD5工具类 */ public class MD5Util { public final static String MD5(String s) { char hex

  • nodejs微信公众号支付开发

    odeJs 微信公众号功能开发,移动端 H5页面调用微信的支付功能.这几天根据公司的需要使用 node 和 h5页面调用微信的支付功能完成支付需求.现在把开发过程重新捋一遍,以帮助更多的开发者顺利的完成微信支付功能的开发.(微信暂时还没有提供 node 的支付功能) 一.请求CODE 请求 code 的目的就是获取用户的 openid(用户相对于当前公众号的唯一标识) 和access_token,请求的API:https://open.weixin.qq.com/connect/oauth2/a

  • java开发微信公众号支付

    最近做了微信公众号支付的开发,由于是第一次做也摸索了几天的时间,也只是达到了实现功能的水平,并没有太多考虑到性能问题,所以这篇文章比较适合初学者. 微信公众号支付的总体其实很简单,大致就分为三步.第一步需要获取用户授权:第二步调用统一下单接口获取预支付id:第三步H5调起微信支付的内置的js.下面介绍具体每一步的开发流程. 一    首先要明确微信公众号支付属于网页版支付,所以相较于app的直接调取微信支付要多一步微信授权.也就是需要获取用户的openid.微信公众号使用的交易类型是JSAPI,

  • java微信公众号企业付款开发

    本文为大家分享了java微信公众号企业付款的开发代码,供大家参考,具体内容如下 详情参照微信开发者文档 企业付款文档 java代码 定义所传递的参数 @RequestMapping(value = "zhifu", method = RequestMethod.GET) public @ResponseBody String getWeixinOpenid(String code, HttpServletRequest request) { // 订单号 自定义 生成32位uuid S

  • java微信公众号开发第一步 公众号接入和access_token管理

    本文就来说一说微信开发第一步,公众号接入以及access_token的管理. 一.微信公众号接入 在微信公众号开发手册上,关于公众号接入这一节内容还是写的比较详细的,文档中说接入公众号需要3个步骤,分别是: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑 其实,第3步已经不能算做公众号接入的步骤,而是接入之后,开发人员可以根据微信公众号提供的接口所能做的一些开发. 第1步中服务器配置包含服务器地址(URL).Token和EncodingAESKey. 服务器地址即公

  • Java微信公众号开发之通过微信公众号获取用户信息

    最近由于公司业务,就开始研究微信开发的流程,说实话,这东西刚开始看到时候和看天书的一样,总算,看了一天的文档,测试代码终于出来了. 1.首先需要到微信网站去设置一下,我是直接用的微信测试号. 接口配置信息必须要填写的,所以说必须能将自己的服务发布出去 到此微信配置完毕,接下来就是直接上代码了 2.获取用户信息的方式一共是两种,前提都是用户关注微信公众号,一种是静默获取(snsapi_base,这种方式只能获取openid),另一种是授权获取(snsapi_userinfo,可以获取用户的详细信息

  • 微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解

    本文实例讲述了PHP实现微信公众号支付功能.分享给大家供大家参考,具体如下: 直言无讳,我就是一个初涉微信开发的小白,写这篇博客的原因:一是为了给自己做下备忘记录,以便以后能回忆这条程序猿的坎坷路:二是希望能帮助到同是自学开发的小白们:三是对那些不屑一顾于我等尘埃的大牛们的控诉,小白的道路坎坷,你们凭什么总要一副高高在上的样子?我等敬而不畏... 背景介绍: 随着智能手机的普及,移动支付下的微信.支付宝所提供的便利需求不言而喻,好吧,至少我周围连个小摊贩的早餐都可以微信支付,而且人家手机还比我高

  • Java 微信公众号开发相关总结

    首先必须要有一个个人微信公众号 个人微信公众号相关的接口权限有限,不过用于个人学习体验一下足够了,如图: 然后进入微信公众后台,点击基本配置,按照如下操作(点击启用,相当于设置请求url为自己后台的): 设置服务器URL.令牌.消息加解密密钥(这个可以使用自动生成的): 服务器URL至关重要,我在这里设置为我自己的域名http://www.youcongtech.com/wx-api. 这个wx-api就是后面对应的接口(比如我发送某个关键字,返回对应的信息). token可以设置复杂点. 效果

随机推荐