淺析微信支付:開通社交立減金活動、建立立減金及領取使用的相關文檔和源碼

本文是【淺析微信支付】系列文章的第十七篇,主要講解在在微信平臺中,如何建立優惠券,開通社交立減金,併爲用戶配置發送立減金。java


上篇文章已經爲你們講解了如何在微信公衆平臺建立優惠券併爲用戶發券,這片文章是優惠券的一個進階,講解微信平臺上的社交立減金用法,但願能夠幫助到你們。git

應用場景

小程序社交立減金是一款幫助商家快速生成具有裂變傳播屬性的小程序經營工具,用戶經過支付、掃碼等場景能夠參與社交立減金活動,將社交立減金禮包分享至朋友後本身可獲取一份,朋友在會話中可隨機獲取社交立減金,並直達商家小程序使用。github

產品優點json

  1. 打通「小程序+支付+優惠」,支付成功頁分發社交立減金,支付時抵扣使用;
  2. 經過聊天分享和裂變,觸達更多潛在用戶,下降拉新成本;
  3. 根據用戶標籤屬性,可配置分發不一樣金額的社交立減金,如新老用戶、是否會員等;
  4. 結合用戶偏好興趣,可配置個性化商品推薦,提升轉化。

官方文檔地址:小程序

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=21515658940X5pIn
複製代碼

接入流程

進入上面文檔地址,文中有開通公衆號活動配置權限,這個權限必須開啓,開啓指南以下:api

社交立減金可經過微信支付後向用戶下發消息領取,在配置活動時須要登陸發起支付的商戶號開通權限。

Q:在微信支付平臺開通「公衆號活動配置」權限
A:使用管理員賬號(管理員爲申請商戶號時給用戶分配的登陸帳號)登陸微信支付商戶平臺pay.weixin.qq.com,進入「產品中心-個人產品-運營工具」,進入並開通「公衆號活動配置」權限。
複製代碼

開通權限以後,還須要完成免充值模式驗收,這個驗收在個人前幾篇文章中已經講過,下面貼上對應的連接查看: 淺析微信支付:開通免充值產品功能及如何進行接口升級指引bash

完成免充值模式驗收後,便可經過接口建立與支付打通的代金券,爲配置立減金活動作準備。微信

若已完成免充值模式驗收,可直接調用建立代金券並設置跳轉小程序,下面是建立的流程和對應代碼。app

建立社交立減金的步驟說明

首先,咱們來理解一下社交立減金的構成和建立流程,這樣才能不被微信給弄迷糊了,下面是幾個步驟的說明:微信公衆平臺

  1. 開通微信公衆平臺中的微信卡券功能
  2. 開通微信商戶平臺中的公衆號活動配置功能
  3. 開通微信商戶平臺中的免充值相關產品功能
  4. 完成免充值模式驗收
  5. 微信商戶平臺建立或者經過接口建立微信代金券
  6. 登錄微信支付商戶平臺 -營銷中心-管理代金券-草稿箱中激活對應卡券
  7. 經過建立支付後領取立減金活動接口建立活動
  8. 登錄微信支付商戶平臺 -營銷中心-營銷活動-滿額送-管理-草稿箱激活活動。
  9. 下單購買某個商品後,在服務通知消息中能夠領取或者轉發社交立減金
  10. 領取,結束

上面的步驟,缺一不可,須要小夥伴一步步的調試和試錯,幸運的是,我已經都試過錯,因此把經驗總結一下,但願小夥伴們不會再次趟坑,建立社交立減金活動的源碼也是有的哦~

好了,話很少說,對於上面的10步,前4步不須要講,不清楚的小夥伴能夠看看個人歷史文章,有對應的講解,下面從第5步開始提及。

建立代金券並設置跳轉小程序

下面先講解接口的方式,完成配置社交立減金活動獎品準備環節,經過本接口開發者能夠建立和支付打通的代金券,並設置代金券跳轉小程序使用,在 base_info 中新增設置字段"pay_info",詳情參考建立卡券接口。

協議:https  
http請求方式: POST  
請求URL:https://api.weixin.qq.com/card/create?access_token=ACCESS_TOKEN  
POST數據格式:JSON
複製代碼

對於POST的數據能夠參考個人歷史文章微信卡券建立,或者查看如下官方文檔:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=21515658940X5pIn
複製代碼

注意:

  1. 卡券提交前需檢查是否有傳:"pay_info"、"is_swipe_card": true 字段;
  2. 卡券的起止時間應大於當前時間;如當前時間爲:2018/1/17 0:0:0,起止時間需大於當前時間:2018/1/17 13:30:03 (時間精確到秒);
  3. 需設置最低消費門檻,如:5元代金券,滿10元可用。 "reduce_cost": 5 ,"least_cost":10 。

推薦查看個人文章,裏面有一些字段的注意事項,這裏就不細講了,下面說一下第二種方式,就是直接經過微信商戶平臺建立代金券,建立完成後,須要在「微信支付商戶平臺 -營銷中心-管理代金券-草稿箱」中激活對應卡券,獲取卡券id後,可繼續建立立減金活動。

建立支付後領取立減金活動接口

重頭戲來了,能夠經過此接口建立立減金活動。將已建立的代金券cardid、跳轉小程序appid、發起支付的商戶號等信息經過此接口建立立減金活動,成功返回活動id即爲建立成功。

協議:https  
http請求方式: POST  
請求URL:https://api.weixin.qq.com/card/mkt/activity/create?access_token=ACCESS_TOKEN 
POST數據格式:JSON
複製代碼

大白話解釋一下,上面的代金券cardid就是經過接口返回的卡券ID,或者是經過手動建立後的卡包ID,就是亂七八糟一串英文的那一個,例如:pX2-vjpU_MT1gFDsP8lNl15PdaFS,官方的POST示例能夠查看文檔:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=21515658940X5pIn
複製代碼

好消息來了,這個接口我已經封裝在sdk中了,封裝爲方法便於你們使用,下面是調用方法和具體方法的代碼。

調用方法:

/**
 * 建立支付後領取立減金活動接口
 *
 * @author yclimb
 * @date 2018/9/18
 */
private void createCardActivity() {
    WXUtils wxUtils = new WXUtils();
    wxUtils.createCardActivity("2018-09-18 18:00:00", "2018-09-18 19:59:59", 3, 1,
            1, "pX2-vjpU_MT1gFDsP8lNl15PdaZE", "100",
            null, false);
}
複製代碼

方法源碼:

/**
 * 建立支付後領取立減金活動接口
 * 經過此接口建立立減金活動。
 * 將已建立的代金券cardid、跳轉小程序appid、發起支付的商戶號等信息經過此接口建立立減金活動,成功返回活動id即爲建立成功。
 * 接口地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=21515658940X5pIn
 *
 * @param begin_time               活動開始時間,精確到秒
 * @param end_time                 活動結束時間,精確到秒
 * @param gift_num                 單個禮包社交立減金數量(3-15個)
 * @param max_partic_times_act     每一個用戶活動期間最大領取次數,最大爲50,默認爲1
 * @param max_partic_times_one_day 每一個用戶活動期間單日最大領取次數,最大爲50,默認爲1
 * @param card_id                  卡券ID
 * @param min_amt                  最少支付金額,單位是元
 * @param membership_appid         獎品指定的會員卡appid。如用戶標籤有選擇商戶會員,則須要填寫會員卡appid,該appid須要跟全部發放商戶號有綁定關係。
 * @param new_tinyapp_user         能夠指定爲是否小程序新用戶(membership_appid爲空、new_tinyapp_user爲false時,指定爲全部用戶)
 * @return json
 * @author yclimb
 * @date 2018/9/18
 */
public JSONObject createCardActivity(String begin_time, String end_time, int gift_num, int max_partic_times_act,
                                     int max_partic_times_one_day, String card_id, String min_amt,
                                     String membership_appid, boolean new_tinyapp_user) {
    try {

        // 建立活動接口以前的驗證
        String msg = checkCardActivity(begin_time, end_time, gift_num, max_partic_times_act, max_partic_times_one_day, min_amt);
        if (null != msg) {
            JSONObject resultJson = new JSONObject(2);
            resultJson.put("errcode", "1");
            resultJson.put("errmsg", msg);
            return resultJson;
        }

        // 獲取[商戶名稱]公衆號的 access_token
        String accessToken = this.getAccessToken(WXConstants.WX_MINI_PROGRAM_CODE);

        // 調用接口傳入參數
        JSONObject paramJson = new JSONObject(1);

        // info 包含 basic_info、card_info_list、custom_info
        JSONObject info = new JSONObject(3);

        // 基礎信息對象
        JSONObject basic_info = new JSONObject(8);
        // activity_bg_color	是	活動封面的背景顏色,可參考:選取卡券背景顏色
        basic_info.put("activity_bg_color", CardBgColorEnum.COLOR_090.getBgName());
        // activity_tinyappid	是	用戶點擊連接後可靜默添加到列表的小程序appid;
        basic_info.put("activity_tinyappid", WXPayConstants.APP_ID);
        // mch_code	是	支付商戶號
        basic_info.put("mch_code", WXPayConstants.MCH_ID);
        // begin_time	是	活動開始時間,精確到秒(unix時間戳)
        basic_info.put("begin_time", DateTimeUtil.getTenTimeByDate(begin_time));
        // end_time	是	活動結束時間,精確到秒(unix時間戳)
        basic_info.put("end_time", DateTimeUtil.getTenTimeByDate(end_time));
        // gift_num	是	單個禮包社交立減金數量(3-15個)
        basic_info.put("gift_num", gift_num);
        // max_partic_times_act	否	每一個用戶活動期間最大領取次數,最大爲50,不填默認爲1
        basic_info.put("max_partic_times_act", max_partic_times_act);
        // max_partic_times_one_day	否	每一個用戶活動期間單日最大領取次數,最大爲50,不填默認爲1
        basic_info.put("max_partic_times_one_day", max_partic_times_one_day);

        // card_info_list	是	能夠配置兩種發放規則:小程序新老用戶、新老會員
        JSONArray card_info_list = new JSONArray(1);
        JSONObject card_info = new JSONObject(3);
        // card_id	是	卡券ID
        card_info.put("card_id", card_id);
        // min_amt	是	最少支付金額,單位是分
        card_info.put("min_amt", String.valueOf(new BigDecimal(min_amt).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).intValue()));
        /*
         * membership_appid	是	獎品指定的會員卡appid。如用戶標籤有選擇商戶會員,則須要填寫會員卡appid,該appid須要跟全部發放商戶號有綁定關係。
         * new_tinyapp_user	是	能夠指定爲是否小程序新用戶
         * total_user	是	能夠指定爲全部用戶
         * membership_appid、new_tinyapp_user、total_user以上字段3選1,未選擇請勿填,沒必要故意填寫false
         */
        if (StringUtils.isNotBlank(membership_appid)) {
            card_info.put("membership_appid", membership_appid);
        } else {
            if (new_tinyapp_user) {
                card_info.put("new_tinyapp_user", true);
            } else {
                card_info.put("total_user", true);
            }
        }
        card_info_list.add(card_info);

        // 自定義字段,表示支付後領券
        JSONObject custom_info = new JSONObject(1);
        custom_info.put("type", "AFTER_PAY_PACKAGE");

        // 拼裝json對象
        info.put("basic_info", basic_info);
        info.put("card_info_list", card_info_list);
        info.put("custom_info", custom_info);
        paramJson.put("info", info);

        // 請求微信接口,獲得返回結果[json]
        HttpEntity<JSONObject> entity = new HttpEntity<>(paramJson, this.getHttpHeadersUTF8JSON());
        JSONObject resultJson = restTemplate.postForObject(WXURL.WX_CARD_ACTIVITY_CREATE_URL, entity, JSONObject.class, accessToken);

        // {"errcode":0,"errmsg":"ok","activity_id":"4728935"}
        System.out.println(resultJson.toJSONString());

        return resultJson;
    } catch (Exception e) {
        WXPayUtil.getLogger().error(e.getMessage(), e);
    }
    return null;
}

/**
 * 建立活動接口以前的驗證
 *
 * @param begin_time               活動開始時間,精確到秒
 * @param end_time                 活動結束時間,精確到秒
 * @param gift_num                 單個禮包社交立減金數量(3-15個)
 * @param max_partic_times_act     每一個用戶活動期間最大領取次數,最大爲50,默認爲1
 * @param max_partic_times_one_day 每一個用戶活動期間單日最大領取次數,最大爲50,默認爲1
 * @param min_amt                  最少支付金額,單位是元
 * @return msg str
 * @author yclimb
 * @date 2018/9/18
 */
public String checkCardActivity(String begin_time, String end_time, int gift_num, int max_partic_times_act,
                                int max_partic_times_one_day, String min_amt) {

    // 開始時間不能小於結束時間
    if (DateTimeUtil.latterThan(end_time, begin_time, DateTimeUtil.TIME_FORMAT_NORMAL)) {
        return "活動開始時間不能小於活動結束時間";
    }

    // 單個禮包社交立減金數量(3-15個)
    if (gift_num < 3 || gift_num > 15) {
        return "單個禮包社交立減金數量(3-15個)";
    }

    // 每一個用戶活動期間最大領取次數,最大爲50,默認爲1
    if (max_partic_times_act <= 0 || max_partic_times_act > 50) {
        return "每一個用戶活動期間最大領取次數,最大爲50,默認爲1";
    }

    // 每一個用戶活動期間單日最大領取次數,最大爲50,默認爲1
    if (max_partic_times_one_day <= 0 || max_partic_times_one_day > 50) {
        return "每一個用戶活動期間單日最大領取次數,最大爲50,默認爲1";
    }

    // 最少支付金額,單位是元
    if (BigDecimal.ONE.compareTo(new BigDecimal(min_amt)) > 0) {
        return "最少支付金額必須大於1元";
    }

    return null;
}


複製代碼

對應的所有代碼,能夠查看個人github,地址以下:

https://github.com/YClimb/wxpay-sdk/blob/master/src/main/java/com/weixin/pay/util/WXUtils.java
複製代碼

建立成功後,會返回一個 "activity_id": "123456" 的json數據,也就是立減金活動id咯,若是建立失敗,也不要着急,查看上面說到的官方文檔,建立接口下有對應的返回碼說明, 已知是足夠解決問題了。

活動建立成功後,須要登錄「微信支付商戶平臺 -營銷中心-營銷活動-滿額送-管理-草稿箱」激活活動,激活後,社交立減金投放成功。能夠經過支付行爲進行驗證。

PS:激活活動後,活動是經過滿額送行爲發送給用戶的,並且是自動發放,若是你在平臺上購買的商品價格知足規則,則會在服務通知中顯示社交立減金的信息,此活動須要用戶主動領取才行,用戶領取的券最終就是咋們最初建立的代金券,此代金券使用規則和正常代金券同樣。

PPS:社交立減金能夠分享轉發給朋友,這個是他的特色,對於每一個活動的代金券規則和份數,你們必定要注意,根據場景投放。

結語

以上爲社交立減金相關的解釋和源碼,小夥伴們必定要注意看看官方文檔哦,具體的源碼能夠看個人github,裏面對每一個方法有詳細的註釋。

若是小夥伴有遇到解決不了的問題,能夠關注做者微信公衆號,加入討論羣中發出疑問,和小夥伴們一塊兒解決哦~

​若是想要提早一覽源碼的小夥伴,能夠先看看個人 github,地址以下: ​ ​​https://github.com/YClimb/wxpay-sdk/blob/master/README.md ​

關注做者微信公衆號,點擊下方討論羣,掃碼便可加入微信支付討論羣與小夥伴一塊兒探討哦~

到此本文就結束了,關注公衆號查看更多推送!!!


關注個人公衆號
相關文章
相關標籤/搜索