亚洲视频二区I天堂网av 在线I丰满人妻AV一区二区三I088精品在线观看视频IAV在线网站免费I亚洲人成影院在线I91精品91久久久777777I131M久I日日摸日日

027-81331413

微信小程序怎么發(fā)紅包

發(fā)布時(shí)間:2020-10-31 瀏覽:7537

微信小程序怎么發(fā)紅包?首先你需要一個(gè)公眾號(hào)和小程序。在小程序中發(fā)送必須先關(guān)注公眾號(hào)。這樣你就可以使用公眾號(hào)的紅包接口給用戶發(fā)送紅包。

原理:

微信小程序怎么發(fā)紅包當(dāng)小程序和公眾號(hào)關(guān)聯(lián)時(shí),每一個(gè)用戶在小程序和公眾號(hào)共有一個(gè)union_id,但open_id是不同的,所以在需要發(fā)紅包是首先獲得小程序的open_id和union_id,根據(jù)union_id的唯一性獲取公眾號(hào)的open_id,再調(diào)用公眾號(hào)的紅包接口(https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack)就可以實(shí)現(xiàn).

附上參數(shù)對(duì)象代碼:

//創(chuàng)建參數(shù)Map
public static SortedMap<Object, Object> getWithdrawParam(String openid, int value) {
    SortedMap<Object, Object> parameters = new TreeMap<Object, Object>();
    parameters.put("mch_appid", PropertyUtil.getInstance().getProperty("wx.appid"));//公眾號(hào)appid
    parameters.put("mchid", PropertyUtil.getInstance().getProperty("wx.mchid"));//綁定的商戶號(hào)
    parameters.put("nonce_str", StringUtil.getRandomString(16));隨機(jī)字符串16位
    parameters.put("partner_trade_no", RandomStringUtils.randomAlphanumeric(20));//商戶訂單號(hào)
    parameters.put("openid", openid);//用戶open_id
    parameters.put("check_name", "NO_CHECK");//是否對(duì)用戶實(shí)名認(rèn)證,NO_CHECK表示否。
    parameters.put("amount", value);//金額
    parameters.put("desc", "紅包");//描述信息
    parameters.put("spbill_create_ip", PropertyUtil.getInstance().getProperty("wx.requestUrl"));//Ip地址,這個(gè)IP必須在公眾號(hào)的白名單中,否則會(huì)失敗!!!
    return parameters;
}

//創(chuàng)建sign ,參數(shù)為UTF-8編碼和上面的參數(shù)Map

public static String createSign(String characterEncoding, SortedMap<String, Object> parameters) {
    StringBuffer sb = new StringBuffer();
    Set es = parameters.entrySet();
    Iterator it = es.iterator();
    while (it.hasNext()) {
        Map.Entry entry = (Map.Entry) it.next();
        String k = (String) entry.getKey();
        Object v = entry.getValue();
        if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
            sb.append(k + "=" + v + "&");
        }
    }
    sb.append("key=" + PropertyUtil.getInstance().getProperty("wx.key"));
    String sign = Md5Util.md5Encode(sb.toString(), characterEncoding).toUpperCase();
    return sign;
}

將上面得到的sign放到Map中,param.put("sign", sign);

將Map轉(zhuǎn)換為XML

public static String getRequestXml(SortedMap<String, Object> param) {
    StringBuffer sb = new StringBuffer();
    sb.append("<xml>");
    Set es = parameters.entrySet();
    Iterator it = es.iterator();
    while (it.hasNext()) {
        Map.Entry entry = (Map.Entry) it.next();
        String k = "" + entry.getKey();
        String v = "" + entry.getValue();
        if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k)) {
            sb.append("<" + k + ">" + "<![CDATA[" + v + "]]></" + k + ">");
        } else {
            sb.append("<" + k + ">" + v + "</" + k + ">");
        }
    }
    sb.append("</xml>");
    return sb.toString();
}

發(fā)送post請(qǐng)求到https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack,參數(shù)為上面的XML即可。

要實(shí)現(xiàn)上面的紅包功能,最好還有個(gè)定時(shí)任務(wù),可以把公眾號(hào)的用戶列表和用戶數(shù)據(jù)實(shí)時(shí)新增到數(shù)據(jù)庫(kù)中,以便根據(jù)唯一的union_id查找對(duì)應(yīng)的兩個(gè)open_id.

附上同步代碼

 獲取access_token,最好和公眾號(hào)共享一個(gè),因?yàn)閍ccess_token每天限定獲取2000次,每次過期時(shí)間為2小時(shí),發(fā)生變動(dòng)時(shí)的5分鐘內(nèi)新舊access_token都可以使用。

public String getAccessToken(){
    String tokenUrl = PropertyUtil.getInstance().getProperty("wx.tokenURL") +
            "?appid=" + PropertyUtil.getInstance().getProperty("red.wx.appid") + "&secret=" +
            PropertyUtil.getInstance().getProperty("red.wx.appSecret") + "&grant_type=client_credential";
    JSONObject tokenResult = JSONObject.parseObject(HttpUtils.get(tokenUrl));
    if (tokenResult.getString("errmsg") != null) {
        log.info("獲取AccessToken失敗,請(qǐng)檢查失敗原因, {}", tokenResult.getString("errmsg"));
        return null;
    }

    log.info("tokenResult="+tokenResult.toString());
    String access_token = tokenResult.getString("access_token");
    stringRedisTemplate.opsForValue().set(redisKey, access_token, 100*60, TimeUnit.SECONDS);
    return access_token;
}

有了access_token就可以獲取用戶列表了,限定一次最多獲取10000個(gè),可以根據(jù)next_openid設(shè)置起始位置。

地址:https://api.weixin.qq.com/cgi-bin/user/get,參數(shù)access_token和next_openid

String userListUrl = PropertyUtil.getInstance().getProperty("wx.userListURL") +
        "?access_token=" + access_token + "&next_openid=" + next_openid;
JSONObject userListResult = JSONObject.parseObject(HttpUtils.get(userListUrl))

得到open_id集合就可以繼續(xù)獲取用戶詳細(xì)信息,可以單獨(dú)也可以批量,批量最多100個(gè)一次。

批量獲取地址:https://api.weixin.qq.com/cgi-bin/user/info/batchget,參數(shù)user_list(100個(gè)用戶的openid)和access_token

代碼就不加了,基本操作。

在分享個(gè)按指定大小,分隔集合,將集合按規(guī)定個(gè)數(shù)分為n個(gè)部分的方法,用來(lái)分隔10000個(gè)open_id為100的list,方便批量獲取
public static  List<List<String>> splitList(List<String> list, int len) {
    if (list == null || list.size() == 0 || len < 1) {
        return null;
    }
    List<List<String>> result = new ArrayList<List<String>>();

    int size = list.size();
    int count = (size + len - 1) / len;

    for (int i = 0; i < count; i++) {
        List<String> subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));
        result.add(subList);
    }
    return result;
}

好了,具體就這么多了,詳細(xì)的可以根據(jù)開發(fā)文檔和本文參考對(duì)照完成。


主站蜘蛛池模板: 关秀媚三级 | 韩国三级bd高清中字2021 | 高跟肉丝丝袜呻吟啪啪网站av | 午夜激情黄色 | 黄色片视频网站 | 亚洲精品aaa | 激情午夜视频 | 国产精品原创av片国产日韩 | 欧美皮鞭调教wwwcom | 人人妻人人澡人人爽国产一区 | 日本九九视频 | 日韩好片一区二区在线看 | 精品96久久久久久中文字幕无 | 国产精品久久久久影院色老大 | 国产精品99无码一区二区 | 婷婷在线综合 | 上司人妻互换中文字幕 | 久久精品国产999久久久 | 九九精品在线观看 | 怡红院亚洲 | 在线色播 | 日韩 欧美 亚洲 国产 | 精品乱码久久久久久久 | 亚洲国产天堂久久久久久 | 国产成人午夜福利在线播放 | 国产精品卡1卡2卡三卡四 | 99国产精品久久不卡毛片 | 色婷婷五月综合亚洲影院 | 国产又黄又刺激又高潮的网站 | 国产伦精品一区二区三区免费视频 | 成人网址在线观看 | 神马午夜国产 | 成人在线观看免费视频 | 波多野结衣中文字幕久久 | 大蜜桃臀偷拍系列在线观看 | 2024国产精品 | 欧美在线人视频在线观看 | 国产真实乱偷精品视频 | 精品丝袜人妻久久久久久 | www.婷婷 | 无码精品人妻一区二区三区影院 | 五月婷婷久久草 | 女人久久久久 | 美女av网| 性开放少妇xxx视频 久久996re热这里有精品 | 国产黄a三级三级三级 | 亚洲综合激情五月丁香六月 | 国产精品玖玖玖在线 | 少妇毛片一区二区三区 | 欧美成人精品一区二区三区 | 日本毛茸茸的丰满熟妇 | 久久精品青青大伊人av | 国产一级做a爱片在线看免 成人午夜影片 | 久久国产精品久久久久久电车 | 国产性色αv视频免费 | www国产欧美 | 国产乱子伦精品免费视频 | 欧美亚洲另类小说 | 国产久9视频这里只有精品 中文字幕在线亚洲日韩6页 | 综合激情网 | 少妇性l交大片免费观看冫 特级a毛片 | 国产人无码a在线西瓜影音 国产精品女优 | 国内精品自国内精品自线 | 亚洲顶级毛片 | 国产午夜三级一区二区三桃花影视 | 国内久久精品视频 | 色欲天天婬色婬香视频综合网 | 亚洲国产精品成人天堂 | 少妇全黄性生交片 | 亚洲欧美不卡高清在线 | 中文字幕在线不卡一区二区 | 叶山小百合av一区二区 | 学生粉嫩无套白浆第一次 | 国内极度色诱视频网站 | aa在线 | 亚洲香蕉网站 | 国产拍揄自揄免费观看 | av色资源 | 99精品免费久久久久久久久日本 | 国产成人免费高清激情视频 | 91看片就是不一样 | 三个熟睡少妇的按摩中文字幕 | 5x社区sq未满十八视频在线 | 免费久久99精品国产自在现 | 男人进女人下部全黄大色视频 | 亚洲中文无码av永久 | 亚洲区色 | 久久久99国产精品免费 | 国产一级精品视频 | 成人在线免费看视频 | 国产精品久久久久久妇女 | 好紧好爽好湿别拔出来视频男男 | 日本做爰吃奶全过程免 | 狠狠亚洲色一日本高清色 | 网站久久久 | 国产不卡一二三 | 日本真人边吃奶边做爽免费视频 | 国产suv精品一区二区6 | 少妇爆乳无码av无码波霸 |