微信支付-免充值立减与折扣(下篇)
一 前言
讀本文前請(qǐng)確保商戶號(hào)已開通免充值立減與折扣。否則請(qǐng)看?微信支付-免充值立減與折扣(上篇)。
本文主要講述如何創(chuàng)建優(yōu)惠券,統(tǒng)一下單和支付通知怎樣支持使用優(yōu)惠券。
二 準(zhǔn)備
2.1 必要前提
你要有微信公眾號(hào)支付/小程序支付/H5支付的開發(fā)經(jīng)驗(yàn)(本文以公眾號(hào)支付為例),否則先看我的上一篇文章?移動(dòng)支付--微信公眾號(hào)支付開發(fā);
2.2 必讀文檔
1)支付接口單品優(yōu)惠功能開發(fā)者文檔;
三 過(guò)程
3.1 創(chuàng)建優(yōu)惠券
3.1.1 哪里創(chuàng)建
步驟:微信商戶平臺(tái) - 營(yíng)銷中心 - 代金券/立減與折扣
3.1.2 創(chuàng)建一張 立減與折扣 - 全場(chǎng)立減優(yōu)惠券
1、?設(shè)置優(yōu)惠券規(guī)則。
?2、設(shè)置優(yōu)惠券規(guī)則。
3、高級(jí)設(shè)置截圖?。
?4、確認(rèn)創(chuàng)建。
5、?創(chuàng)建成功,需要激活后才能使用。
?3.1.3 創(chuàng)建一張 立減與折扣 - 創(chuàng)建單品立減優(yōu)惠券
1、設(shè)置優(yōu)惠券規(guī)則?
2、設(shè)置單品優(yōu)惠規(guī)則。?
3、設(shè)置優(yōu)惠券規(guī)則。?
4、創(chuàng)建優(yōu)惠券。
5、?創(chuàng)建成功,需要激活后才能使用。
3.2 統(tǒng)一下單接口修改
根據(jù)文檔?統(tǒng)一下單API(支持單品優(yōu)惠)?,統(tǒng)一下單接口做了以下修改,附修改代碼:
//元轉(zhuǎn)分Double moneyd = Double.parseDouble(money) * 100;Integer moneyi = moneyd.intValue();String amount = moneyi.toString();parameters.put("appid", appId);parameters.put("mch_id", mchId);parameters.put("nonce_str", WeixinUtil.create_nonce_str());parameters.put("body", orderDetail);parameters.put("out_trade_no", orderId);parameters.put("total_fee", amount);parameters.put("spbill_create_ip", spbill_create_ip);parameters.put("notify_url", notify_url);parameters.put("trade_type", "JSAPI");// 微信支付-優(yōu)惠券-參數(shù)配置,start--------------------------------------------------------------// 單品信息,使用Json數(shù)組格式提交JSONObject goodsDetailObj = new JSONObject();goodsDetailObj.put("goods_id", goodsId); // 商品編碼(必填)goodsDetailObj.put("wxpay_goods_id", ""); // 微信支付定義的統(tǒng)一商品編號(hào)(沒有可不傳)goodsDetailObj.put("goods_name", orderDetail); // 商品的實(shí)際名稱goodsDetailObj.put("quantity", 1); // 用戶購(gòu)買的數(shù)量(必填)goodsDetailObj.put("price", amount); // 商品單價(jià)(必填),單位為:分。如果商戶有優(yōu)惠,需傳輸商戶優(yōu)惠后的單價(jià)(例如:用戶對(duì)一筆100元的訂單使用了商場(chǎng)發(fā)的紙質(zhì)優(yōu)惠券100-50,則活動(dòng)商品的單價(jià)應(yīng)為原單價(jià)-50)List<JSONObject> goodsDetailList = new ArrayList<>();goodsDetailList.add(goodsDetailObj);// 單品優(yōu)惠活動(dòng)該字段JSONObject detailObj = new JSONObject();detailObj.put("cost_price", Integer.parseInt(amount)); // (單品優(yōu)惠必填)1.商戶側(cè)一張小票訂單可能被分多次支付,訂單原價(jià)用于記錄整張小票的交易金額。2.當(dāng)訂單原價(jià)與支付金額不相等,則不享受優(yōu)惠。3.該字段主要用于防止同一張小票分多次支付,以享受多次優(yōu)惠的情況,正常支付訂單不必上傳此參數(shù)。detailObj.put("receipt_id", ""); // 商家小票IDdetailObj.put("goods_detail", goodsDetailList); // 單品信息(必填),使用Json數(shù)組格式提交parameters.put("version", "1.0"); // 接口版本號(hào)(必填),區(qū)分原接口,默認(rèn)填寫1.0。入?yún)⑿略鰒ersion后,則支付通知接口也將返回單品優(yōu)惠信息字段promotion_detail,請(qǐng)確保支付通知的簽名驗(yàn)證能通過(guò)。parameters.put("goods_tag",goodsTag); // 訂單優(yōu)惠標(biāo)記,用于區(qū)分訂單是否可以享受優(yōu)惠parameters.put("detail", detailObj.toJSONString()); // 單品優(yōu)惠活動(dòng)該字段必傳(必填)// 微信支付-優(yōu)惠券-參數(shù)配置,end----------------------------------------------------------------parameters.put("openid", openid);注意:對(duì)于單品優(yōu)惠優(yōu)惠券,單品優(yōu)惠活動(dòng)detail字段列表 中??cost_price 字段必填(這個(gè)字段文檔中為非必填~~),否則無(wú)法使用單品優(yōu)惠。
3.3 支付通知代碼修改
為了方便以后統(tǒng)計(jì)分析,支付通知代碼中增加了記錄使用的優(yōu)惠券信息。下面附上獲取這些信息的代碼:
String orderId = (String) map.get("out_trade_no"); // 獲取訂單IDString transactionId = (String) map.get("transaction_id"); // 獲取微信訂單號(hào)String totalFee = (String) map.get("total_fee"); // 獲取訂單總額,單位為分String timeEnd = (String) map.get("time_end"); // 獲取訂單支付完成時(shí)間String cashFee = (String) map.get("cash_fee"); // 現(xiàn)金支付金額,單位為分 //String couponFee = (String) map.get("coupon_fee"); // 支付優(yōu)惠總額,單位為分String payBank = (String) map.get("bank_type"); // 付款銀行,付款方式,詳情請(qǐng)看:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_2String promotionDetail = (String) map.get("promotion_detail"); // 營(yíng)銷詳情。統(tǒng)一下單API上傳參數(shù)version后才有返回,返回值為Json格式。JSONObject marketingObj = new JSONObject();String promotion_name = ""; // 優(yōu)惠券名稱String promotion_amount = ""; // 用戶享受優(yōu)惠的金額String promotion_activityId = ""; // 在微信商戶后臺(tái)配置的批次ID,用于辨別使用的哪張優(yōu)惠券// 判斷是否使用支付優(yōu)惠券if (StringUtils.isNotBlank(promotionDetail)) {JSONObject promotionObj = JSONObject.parseObject(promotionDetail);if (promotionObj != null) {String detail = promotionObj.getString("promotion_detail");if (StringUtils.isNotBlank(detail)) {JSONArray promotionDetailArray= JSONArray.parseArray(detail);if (promotionDetailArray != null && promotionDetailArray.size() > 0) {// 本業(yè)務(wù)只有一條子商品信息,故直接獲取第一條JSONObject promotionDetailObj = promotionDetailArray.getJSONObject(0);promotion_activityId = promotionDetailObj.getString("activity_id");promotion_name = promotionDetailObj.getString("name");promotion_amount = promotionDetailObj.getString("amount");}}}}四、問(wèn)題:
1)假如有兩張優(yōu)惠券,分別是 全場(chǎng)立減券A 和 單品立減券B,這兩張優(yōu)惠券設(shè)置的訂單優(yōu)惠標(biāo)記(即goods_tag)一樣,不同點(diǎn)是優(yōu)惠券B同時(shí)設(shè)置了商品編碼(即goods_id),在同一下單接口同時(shí)傳了?goods_tag 和?goods_id 參數(shù),此時(shí)微信在用戶支付時(shí)會(huì)優(yōu)先使用哪張優(yōu)惠券?
經(jīng)測(cè)試會(huì)優(yōu)先使用單品立減券B,且在支付界面中不會(huì)展示 優(yōu)惠券A。
2)假如又有兩張優(yōu)惠券,分別是 全場(chǎng)立減券A 和 全場(chǎng)代金券B,這兩張優(yōu)惠券設(shè)置的訂單優(yōu)惠標(biāo)記(即goods_tag)一樣,在用戶領(lǐng)取了優(yōu)惠券B的前提下,微信在用戶支付時(shí)會(huì)優(yōu)先使用哪張券?
經(jīng)測(cè)試會(huì)優(yōu)先使用全場(chǎng)代金券B。
五、補(bǔ)充:
5.1 為方便小伙伴們開發(fā),附上各種優(yōu)惠券支付通知接收參數(shù):
1)立減與折扣 - 全場(chǎng)立減 通知回調(diào)接收參數(shù):
{"appid": "test","bank_type": "CFT","cash_fee": "1","fee_type": "CNY","is_subscribe": "Y","mch_id": "1234567890","nonce_str": "0b3743772a2a4d8b8b9005c64d47623f","openid": "test","out_trade_no": "010100032018111400067818","promotion_detail": "{\"promotion_detail\":[{\"promotion_id\":\"12345678\",\"name\":\"立減與折扣-全場(chǎng)滿減\",\"scope\":\"GLOBAL\",\"type\":\"DISCOUNT\",\"amount\":1000,\"activity_id\":\"1234567\",\"wxpay_contribute\":0,\"merchant_contribute\":1000,\"other_contribute\":0}]}","result_code": "SUCCESS","return_code": "SUCCESS","sign": "6EE6BB2EF05C702FD00C550D82E8DE31","time_end": "20181116170811","total_fee": "1001","trade_type": "JSAPI","transaction_id": "4200000206201811165319882354","version": "1.0" }2)立減與折扣 - 單品立減通知回調(diào)接收參數(shù):
{"appid": "test","bank_type": "PSBC_DEBIT","cash_fee": "1","fee_type": "CNY","is_subscribe": "Y","mch_id": "test","nonce_str": "0bd1e91037834c658b30081241bc6460","openid": "test_openid","out_trade_no": "0101000320181114000627","promotion_detail": "{\"promotion_detail\":[{\"promotion_id\":\"test\",\"name\":\"立減與折扣-單品滿減\",\"scope\":\"SINGLE\",\"type\":\"DISCOUNT\",\"amount\":3000,\"activity_id\":\"test\",\"wxpay_contribute\":0,\"merchant_contribute\":3000,\"other_contribute\":0,\"goods_detail\":[{\"goods_id\":\"010003\",\"quantity\":1,\"price\":3001,\"discount_amount\":3000}]}]}","result_code": "SUCCESS","return_code": "SUCCESS","sign": "73195D1130F14C3797858BD23883B492","time_end": "20181114165912","total_fee": "3001","trade_type": "JSAPI","transaction_id": "4200000215201811145730796824","version": "1.0" }2)立減與折扣 - 全場(chǎng)折扣通知回調(diào)接收參數(shù):
{"appid": "test","bank_type": "CFT","cash_fee": "1","fee_type": "CNY","is_subscribe": "Y","mch_id": "1234567890","nonce_str": "66f3049df96b4176953911e5bad40f3b","openid": "test","out_trade_no": "010100032018111400067823","promotion_detail": "{\"promotion_detail\":[{\"promotion_id\":\"1234567890\",\"name\":\"全場(chǎng)折扣優(yōu)惠\",\"scope\":\"GLOBAL\",\"type\":\"DISCOUNT\",\"amount\":99,\"activity_id\":\"1234567\",\"wxpay_contribute\":0,\"merchant_contribute\":99,\"other_contribute\":0}]}","result_code": "SUCCESS","return_code": "SUCCESS","sign": "E59747EACFE5410FEC5205CA292F9D31","time_end": "20181116181640","total_fee": "100","trade_type": "JSAPI","transaction_id": "4200000205201811169229040652","version": "1.0" }4)代金券 - 全場(chǎng)券通知回調(diào)接收參數(shù):
{"appid": "test","bank_type": "CFT","cash_fee": "1","fee_type": "CNY","is_subscribe": "Y","mch_id": "1234567890","nonce_str": "ad3dc6346e894667851a2d6b9d888109","openid": "test","out_trade_no": "010100032018111400067820","promotion_detail": "{\"promotion_detail\":[{\"promotion_id\":\"1234567890\",\"name\":\"代金券-全場(chǎng)券測(cè)試\",\"scope\":\"GLOBAL\",\"type\":\"DISCOUNT\",\"amount\":1000,\"activity_id\":\"1234567\",\"wxpay_contribute\":0,\"merchant_contribute\":1000,\"other_contribute\":0}]}","result_code": "SUCCESS","return_code": "SUCCESS","sign": "B557FFD756E05FFA8E6A3DFF216715A5","time_end": "20181116175129","total_fee": "1001","trade_type": "JSAPI","transaction_id": "4200000206201811167791965300","version": "1.0" }5)代金券 - 單品券通知回調(diào)接收參數(shù):
{"appid": "test","bank_type": "CFT","cash_fee": "1","fee_type": "CNY","is_subscribe": "Y","mch_id": "1234567890","nonce_str": "c1caf40c84844af09bb8698fc4193d66","openid": "test","out_trade_no": "010100032018111400067821","promotion_detail": "{\"promotion_detail\":[{\"promotion_id\":\"1234567890\",\"name\":\"單品券測(cè)試\",\"scope\":\"SINGLE\",\"type\":\"DISCOUNT\",\"amount\":1000,\"activity_id\":\"1234567\",\"wxpay_contribute\":0,\"merchant_contribute\":1000,\"other_contribute\":0,\"goods_detail\":[{\"goods_id\":\"020001\",\"quantity\":1,\"price\":1001,\"discount_amount\":1000}]}]}","result_code": "SUCCESS","return_code": "SUCCESS","sign": "E04FC81B9D38B0208111F5FDCF18BB5E","time_end": "20181116175726","total_fee": "1001","trade_type": "JSAPI","transaction_id": "4200000208201811167067822806","version": "1.0" }5.2 可以使用優(yōu)惠券的微信支付界面展示:
總結(jié)
以上是生活随笔為你收集整理的微信支付-免充值立减与折扣(下篇)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 阿龙的学习笔记---计算机网络知识点总结
- 下一篇: ELF文件格式, ELF文件是什么,里