收藏
回答

wx.addCard() 成功回调res.cardList.cardExt为空?

问题:在开发者工具上,sucess回调cardExt是正常,但是在真机预览上就都是空的。如果只领取一张,回调是正常的,多张就不可以,但是返回的isSuccess都是true。微信卡包中也能看到刚领取的卡券。再次打开addCard显示的都是已领取。异常都在这个真机cardExt返回为空。

真机:iphone 8, iphone 7p, 小米(型号不详)

需求:后端需要用cardExt里面的code 去做后台确认卡券已被领取。现在想到的就是拿返回的加密code去解密出原来的code,终究不是上策。有其他发方案吗。

返回的数据截图:


前端代码:

// 一键领取全部优惠券
collectAllCoupons(){
  let wxCardList = [];
  let idList = [];

  this.canCollectCouponList.forEach(item => {
    let { timestamp, nonce_str, card_id, code, openid, signature } = item.wx_info;

    wxCardList.push({
      cardId: card_id,
      cardExt: JSON.stringify({
        timestamp,
        nonce_str,
        card_id,
        code,
        openid,
        signature,
      }),
    });

    idList.push({id: item.id});

  });
 
  console.log('wxCardList');
  console.log(wxCardList);
 
  this.addWxCard(wxCardList, idList);

},

// 添加到微信卡包

    addWxCard(wxCardListidList){

      wx.addCard({

        cardList: wxCardList,

        success: (res=> {

          console.log('res');

          console.log(res);


          let cardList = res.cardList;

          let toUpdateCouponsList = [];


          cardList.forEach((itemindex)=>{

            let cardExt = JSON.parse(item.cardExt);


            wxCardList.forEach(item2 =>{

              if(cardExt.code == JSON.parse(item2.cardExt).code && item.isSuccess){

                toUpdateCouponsList.push({

                  code: cardExt.code,

                  id: idList[index].id,

                });

              }

            })

          });

 

          console.log('toUpdateCouponsList');

          console.log(toUpdateCouponsList);


          if(toUpdateCouponsList.length > 0){

            console.log('核销');


            this.$api.coupon_sureGot(toUpdateCouponsList).then(res => {

              this.getCoupon(); //刷新卡券 //正式

              wx.showToast({

                title: res.data.msg

                icon: 'none',

                duration: 1500,

              });

            });

          }

        },

        fail: (err=> {

          console.log(err)

        },

      });

    },







回答关注问题邀请回答
收藏

1 个回答

  • 闸蟹
    闸蟹
    2019-10-24

    plan B:把微信返回的加密后的code,传给后端,后端去找微信接口换回原来的code。

    plan C:  addCard success返回的cardList 中的cardExt跟我前端post给微信后台的cardExt的顺序是一致的, 不太严谨的话,依次按顺序把加密前的code拿出来也是可以的。

    2019-10-24
    有用
    回复
登录 后发表内容