精华内容
下载资源
问答
  • 小程序生成小程序分享朋友圈

    千次阅读 2019-03-08 15:45:32
    小程序实现分享 公司很多时候都会想要传播自己的小程序,从而获取更多的流量,从而分享朋友圈的功能就诞生了。 分享步骤: 一、通过canvas组件把要分享出去的东西画出来 二、通过saveImageToPhotosAlbum方法把...

    小程序实现分享

    公司很多时候都会想要传播自己的小程序,从而获取更多的流量,从而分享朋友圈的功能就诞生了。

    分享步骤:

    一、通过canvas组件把要分享出去的东西画出来

    二、通过saveImageToPhotosAlbum方法把canvas生成的画布转成图片保存到本地

    三、通过发朋友圈的方式把之前保存的图片发到朋友圈

    下面上代码:

    一、通过canvas组件把要分享出去的东西画出来

    首先在wxml添加一个画布(canvas),画布上会绑定一个bindtap事件(用来预览图片的功能)

    要实现分享,最重要的是获取二维码:为满足不同需求和场景,这里提供了三个接口,开发者可挑选适合自己的接口。

    A接口,生成小程序码,可接受path参数较长,生成个数受限。

    B接口,生成小程序码,可接受页面参数较短,生成个数不受限。

    C接口,生成二维码,可接受path参数较长,生成个数受限。

    第一步:

    先通过AppId和AppSecret获取AccessToken(注意:调用接口时,请登录“微信公众平台-开发-基本配置”提前将服务器IP地址添加到IP白名单中,点击查看设置方法,否则将无法调用成功,token有效期为两小时)

    请求地址:https://api.weixin.qq.com/cgi-bin/token

    请求方式:GET

    请求参数:

    参数

    是否必须

    说明

    grant_type

    获取access_token填写client_credential

    appid

    第三方用户唯一凭证

    secret

    第三方用户唯一凭证密钥,即appsecret

    返回参数:

    参数

    说明

    access_token

    获取到的凭证

    expires_in

    凭证有效时间,单位:秒

    详细详细请看api文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

    第二步:

    有了AccessToken,我们就可以获取不同的小程序二维码了。

    小程序码分两种:前面一种为菊花式小程序码(接口A和接口B),另一种是狗皮膏药式QR码(接口C)

     

    接口A:适用于需要的码数量较少的业务场景 接口地址:

    https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN

    注意:通过该接口生成的小程序码,永久有效,数量限制见文末说明,请谨慎使用。用户扫描该码进入小程序后,将直接进入 path 对应的页面。

     

    接口B:适用于需要的码数量极多的业务场景

    接口地址:

    https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN

    注意:通过该接口生成的小程序码,永久有效,数量暂无限制。用户扫描该码进入小程序后,开发者需在对应页面获取的码中 scene 字段的值,再做处理逻辑。使用如下代码可以获取到二维码中的 scene 字段的值。调试阶段可以使用开发工具的条件编译自定义参数 scene=xxxx 进行模拟。首页onLoad的时候获取参数需var scene = decodeURIComponent(options.scene)

     

    接口C:适用于需要的码数量较少的业务场景

    接口地址:

    https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN

    注意:通过该接口生成的小程序二维码,永久有效,数量限制见文末说明,请谨慎使用。用户扫描该码进入小程序后,将直接进入 path 对应的页面。

     

    // canvas生成图片地址

    return new Promise(function (resolve, reject) {

    wx.getSystemInfo({

           success: function (res) {

           var arr = [res.windowWidth, res.windowHeight];

           resolve(arr);

           }

    })

    }).then(function (value) {

           wx.canvasToTempFilePath({

           destWidth: value[0] * 6, // 这里将图片扩大6倍,是为了让保存的图片更清晰

           destHeight: value[1] * 6,

           fileType: "jpg",

           canvasId: 'shareCanvas',// 该id就是canvas组件的 canvas_id

           quality: 1,

           success: function (obj) {

                 console.log(obj.tempFilePath);

                 that.setData({

                 tempFilePath: obj.tempFilePath

                 })

           }

    })

    })

     

    二、最后通过saveImageToPhotosAlbum方法把canvas生成的画布转成图片保存到相册

    //保存至相册

    saveImageToPhotosAlbum: function () {

         var that = this

         var value = that.data.tempFilePath;// 该图片为你上面画出来的图片地址;

         wx.saveImageToPhotosAlbum({

              filePath: value,

              success: (res) => {

              // 保存成功

              },

         fail: function (res) {

               console.error("打开设置窗口");

               wx.openSetting({

                    success(settingdata) {

                           console.error(settingdata)

                           if (settingdata.authSetting["scope.writePhotosAlbum"]) {

                                console.error("获取权限成功,再次点击图片保存到相册")

                           } else {

                                console.error("获取权限失败")

                           }

                   }

              })

        }

    })

    },

    三、通过发朋友圈的方式把之前保存的图片发到朋友圈(相信这一步大家都懂,我就不介绍了)

     

    小程序的局限性

    1. tip:通过该接口,仅能生成已发布的小程序的二维码。

    2. tip:可以在开发者工具预览时生成开发版的带参二维码。

    3. tip:接口A加上接口C,总共生成的码数量限制为100,000,请谨慎调用。

    4. tip: POST 参数需要转成 json 字符串,不支持 form 表单提交。

    附:大家有不懂的可以一起探讨哦

     

    展开全文
  • 小程序分享界面返回按钮

    千次阅读 2018-11-27 12:16:34
    小程序分享的时候,当别人打开分享的界面,分享上面不会有返回按钮,因为小程序默认分享界面是首页,所以不会有返回按钮。如果需要返回首页,一般有两种做法。 1,添加一个悬浮窗 <image wx:if="{{is...

    小程序分享的时候,当别人打开分享的界面,分享上面不会有返回按钮,因为小程序默认分享界面是首页,所以不会有返回按钮。如果需要返回首页,一般有两种做法。

    1,添加一个悬浮窗

    <image wx:if="{{isshare==1}}" class='back-home' bindtap='backHome' src='../../../img/backhome.png'></image>

     

    .back-home {

    position: fixed;

    width: 180rpx;

    height: 180rpx;

    right: 4rpx;

    bottom: 80rpx;

    z-index: 10000;

    }

    分享时:

    return {

    title: shareTitle,

    imageUrl: image,

    path: '/pages/travelList/travelList?id=' + bannerid + "&name=" + this.data.name + "&isshare=1&isShareId=1",

    //别忘记把需要的参数也传过去,不然会报错。

    success: function(res) {

    },

    fail: function(res) {

    }

    };

    然后在这个界面的noload里:判断isshare的值,默认是0,如果是1就证明是分享过来的,显示回首页的按钮。然后继续你的表演

    2,添加一个返回按钮

    原理是分享的界面其实不是当前页,而是首页,然后在首页价格判断。isShareId=1,对就是这货。也在onload里

    if (options.isShareId == '1') {//分享标识,进入界面后判断是否跳转到分享界面

    wx.navigateTo({

    url: './travelList/travelList?id=' + options.id + "&name=" + options.name + "&isshare=1"

    })

    }

    ok,我的代码里是两个方法都用了。读者可根据需求自己处理

    补充一下,如果需要点击手机返回的时候,不要在显示分享的界面,也就是说,那么返回到首页的方法可以用

    wx.redirectTo(OBJECT)

     关闭当前页面,跳转到应用内的某个页面。

    转跳界面还有2个方法,具体可参见我的另一篇博客

    https://blog.csdn.net/qq_30299243/article/details/81047417

     

     

    展开全文
  • 小程序实现分享朋友圈

    万次阅读 2018-06-07 11:13:15
    有过小程序基础的同学应该知道,小程序是不能直接分享到朋友圈,起码是自从我写下这边文章起,小程序还没有提供分享朋友圈的api。 但是公司很多时候都会想要传播自己的小程序,从而获取更多的流量,从而分享朋友...

    有过小程序基础的同学都应该知道,小程序是不能直接分享到朋友圈,起码是自从我写下这边文章起,小程序还没有提供分享朋友圈的api。

    但是公司很多时候都会想要传播自己的小程序,从而获取更多的流量,从而分享朋友圈的功能就诞生了。

    老规矩,先说说我的实现思路:

    1、通过canvas组件把要分享出去的东西画出来

    2、通过saveImageToPhotosAlbum方法把canvas生成的画布转成图片保存到本地

    3、通过发朋友圈的方式把之前保存的图片发到朋友圈

    实现过程中要注意的点:

    1、如果是请求网络图片的话,绘制图片的方法一定要写在请求的回调方法里面。

    2、获取相册的授权scope.writePhotosAlbum

    3、如果发现绘制出来的图片很模糊,那一定是没有将deswidth和desheight乘2

    4、找准每一个元素在画布上的坐标,切记文字的Y轴坐标是文字的最底下

    好了,说了这么多,直接上干货。

    分享前的图片

     

    分享后的图片

     

    实现代码:

     

    /**

    * 生命周期函数--监听页面加载

    */

    onLoad: function (options) {

     

    var that=this;

    //获取用户设备信息,屏幕宽度

    wx.getSystemInfo({

    success: res => {

    console.log(res);

    that.setData({

    screenWidth: res.screenWidth,

    screenHeight: res.screenHeight,

    });

    }

    });

    var name = decodeURIComponent(options.queryString);

    that.setData({

    queryString:name

    });

    //请求后台数据

    wx.request({

    url: 'https://xxx.do',

    data: {

    'queryString': name,

    },

    method: 'POST',

    header: { 'content-type': 'application/x-www-form-urlencoded;charset=utf-8' },

    success: function (res) {

    var list = res.data.data;

    if (list != null && list.length>0){

    var obj1 = list[0];

    var obj2 = list[1];

    var obj3 = list[2];

    if (obj1 != null) {

    that.setData({

    guanname: obj1.name,

    guancount: obj1.displayPercent,

    imgpath: obj1.imgUrl,

    desc: obj1.description,

    txtone: true

    });

    }

    if (obj2 != null) {

    that.setData({

    yaname: obj2.name,

    yacount: obj2.displayPercent,

    txttwo: true

    });

    }

    if (obj3 != null) {

    that.setData({

    jiname: obj3.name,

    jicount: obj3.displayPercent,

    txtthree: true

    });

    }

    //制作要分享的图片

    const ctx = wx.createCanvasContext('sharecan')

    //主要就是计算好各个图文的位置

     

    //绘制红色背景

    ctx.setFillStyle('#FF5554')

    ctx.fillRect(0, 0, that.data.screenWidth, 528)

     

    //绘制文字

    ctx.setFontSize(25)

    ctx.setFillStyle("#ffffff")

    ctx.fillText("品牌鉴定", 12, 64)

     

    //绘制机器人

    ctx.drawImage('/pages/images/jqr.png', 115, 42, 29, 24);

     

    //绘制文字

    ctx.setFontSize(14)

    ctx.setFillStyle("#ffffff")

    var dsj = '经过商标大数据分析,最符合 ' + name + '™ 品牌的商品是';

    ctx.fillText(dsj, 12, 89)

     

    ctx.setFillStyle('#ffffff')//设置矩形的背景颜色

    ctx.fillRect(12, 96, 351, 244)

     

    //请求的网络图片路径

    wx.getImageInfo({

    src: that.data.imgpath,

    success: function (res) {

    //请求成功后将会生成一个本地路径即res.path,

    //然后将该路径缓存到storageKeyUrl关键字中

    wx.setStorageSync("imgUrl", res.path);

    var imgurl = wx.getStorageSync("imgUrl");

     

    ctx.drawImage(imgurl, 12, 96, 351, 173);

    ctx.setFillStyle('#E21917')//设置水印

    ctx.fillText(name + '™', 293, 145)

    var desc = name + '™牌' + that.data.guanname + ',' + that.data.desc;

    var descone = "";

    var desctwo = "";

    if (desc.length > 18) {

    descone = desc.substring(0, 18);

    desctwo = desc.substring(18, desc.length);

    console.log(descone);

    console.log(desctwo)

    ctx.setFillStyle("#222222")

    ctx.setFontSize(18)

    ctx.fillText(descone, 24, 302)

    ctx.setFillStyle("#222222")

    ctx.setFontSize(18)

    ctx.fillText(desctwo, 24, 326)

    } else {

    ctx.setFillStyle("#222222")

    ctx.setFontSize(18)

    ctx.fillText(desc, 24, 302)

    }

     

    ctx.setFontSize(12)

    ctx.setFillStyle('#FFAAA9')

    ctx.fillText("* 图源网络,非商业用途,如有侵权请联系删除",12,360);

    ctx.setFontSize(20)

    ctx.setFillStyle('#FFFFFF')

    var dds = '大多数注册 ' + name + '™ 相关商标品牌中'

    ctx.fillText(dds, 12, 390)

     

    if (that.data.txtone) {

    ctx.drawImage('/pages/images/guanjun.png', 12, 404.5, 9.5, 15);

     

    ctx.setFontSize(14)

    ctx.setFillStyle('#FFBFBF')

    var gn = that.data.guancount + ' 的人用做';

    ctx.fillText(gn, 27.5, 419.5)

     

    ctx.setFontSize(14)

    ctx.setFillStyle('#ffffff')

    ctx.fillText(that.data.guanname + ';', 120, 419.5);

    }

     

    if (that.data.txttwo) {

    ctx.drawImage('/pages/images/yajun.png', 12, 430.5, 9.5, 15);

     

    ctx.setFontSize(14)

    ctx.setFillStyle('#FFBFBF')

    var ya = that.data.yacount + ' 的人使用';

    ctx.fillText(ya, 27.5, 444)

     

    ctx.setFontSize(14)

    ctx.setFillStyle('#ffffff')

    ctx.fillText(that.data.yaname + ';', 120, 444);

    }

     

    if (that.data.txtthree) {

    ctx.drawImage('/pages/images/jijun.png', 12, 456.5, 9.5, 15);

     

    ctx.setFontSize(14)

    ctx.setFillStyle('#FFBFBF')

    var jn = that.data.jicount + ' 的人用来';

    ctx.fillText(jn, 27.5, 471)

     

    ctx.setFontSize(14)

    ctx.setFillStyle('#ffffff')

    ctx.fillText(that.data.jiname + ';', 120, 471);

    }

    //绘制底部的分享图片

    ctx.drawImage('/pages/images/botshare.png', 0, 528, that.data.screenWidth, 139);

    //绘制完成之后的回调方法

    ctx.draw(false, function (e) {

    that.data.isCompletedDraw = true

    });

     

    }

    });

    }else{

    wx.navigateTo({

    url: '/pages/ppblank/ppblank?name='+encodeURIComponent(that.data.queryString),

    })

    }

    }

    });

     

    }

     

    sharepyq:function(e){//点击分享朋友圈

     

    var that=this;

    if (!that.data.isCompletedDraw){

    wx.showToast({

    image: '/pages/images/tishi.png',

    title: '图片正在生成中',

    icon: 'none',

    });

    return ;

    }

    console.log("是否拒绝过授权:"+that.data.auth)

    if(that.data.auth==false){

    wx.showModal({

    content: 'T _ T 请打开保存相册的权限',

    showCancel: false,

    confirmText: '去打开',

    confirmColor: '#72B9C3',

    success: function (res) {

    //进入授权页面

    wx.openSetting({

    success: (res) => {

    res.authSetting = {

    "scope.writePhotosAlbum": true

    }

    that.setData({

    modaltwo: false,

    auth:true

    });

    }

    });

    }

    });

    return false;

    }

    var finwid = that.data.screenWidth*2;

    var finhei = that.data.screenHeight*2;

    wx.canvasToTempFilePath({

    x: 0,

    y: 0,

    width: that.data.screenWidth,

    height: that.data.screenHeight,

    destWidth: finwid,

    destHeight: finhei,

    canvasId: 'sharecan',

    success: function (res) {

    that.setData({

    preurl: res.tempFilePath,

    canvasHidden: false

    });

    //生产环境时 记得这里要加入获取相册授权的代码

    wx.getSetting({

    success(res) {

     

    if (!res.authSetting['scope.writePhotosAlbum']) {//未授权,则重新授权

    wx.authorize({

    scope: 'scope.writePhotosAlbum',

    success() {

    // 用户已经同意小程序使用保存相册功能,

    //后续调用 wx.saveImageToPhotosAlbum 接口不会弹窗询问

    wx.saveImageToPhotosAlbum({

    filePath: that.data.preurl,

    success(res) {

    wx.showModal({

    content: '图片已保存到相册,赶紧晒一下吧~',

    showCancel: false,

    confirmText: '好哒',

    confirmColor: '#72B9C3',

    success: function (res) {

    if (res.confirm) {

    console.log('用户点击确定');

    that.setData({

    canvasHidden: true

    });

    }

    that.setData({

    modaltwo: false,

    });

    }

    })

    }

    });

    }, fail: function (res) {

    console.log("拒绝授权");

    console.log(res);

    that.setData({

    canvasHidden: true,

    modaltwo: false,

    auth: false

    });

    }

    })

     

    } else {//已经授权,则保存图片

    wx.saveImageToPhotosAlbum({

    filePath: that.data.preurl,

    success(res) {

    wx.showModal({

    content: '图片已保存到相册,赶紧晒一下吧~',

    showCancel: false,

    confirmText: '好哒',

    confirmColor: '#72B9C3',

    success: function (res) {

    if (res.confirm) {

    console.log('用户点击确定');

    that.setData({

    canvasHidden: true

    });

    }

    that.setData({

    modaltwo: false

    });

    }

    })

    }

    });

    }

    }

    });

    },

    fail: function (res) {

    console.log("保存失败")

    }

    })

    }

     

    如果我的文章帮助到了大家,减少大家的弯路,愿意打赏的请扫下面的二维码,也可留言。

     

    展开全文
  • 小程序生成图片分享朋友圈

    千次阅读 2019-10-23 16:02:23
    小程序开发者希望自己的小程序得以广泛传播,因为不少小程序都设计了很多转发激励行为,但分享小程序到朋友圈(或其他外部平台)一直是一个难题。一个常见但方案就是生成分享海报、分享图片。但生成分享图片在技术...

    小程序生成图片分享朋友圈

    小程序开发者都希望自己的小程序得以广泛传播,因为不少小程序都设计了很多转发激励行为,但分享小程序到朋友圈(或其他外部平台)一直是一个难题。一个常见但方案就是生成分享海报、分享图片。但生成分享图片在技术上却也是一个难题。


    技术选型

    目前常用技术方案基本分为三种:

    1. 使用 canvas 绘图并生成
    2. 使用后端绘图库进行绘制,返回给小程序端
    3. 使用服务端开一个浏览器进行 HTML 渲染,并截图返回给小程序端

    第一种方案:要求较高,canvas 和纯 html 布局相去甚远,零基础学习成本较高,而且在不同的微信浏览器中效果不可预期,想短时间内做出精美可控的生成图片不容易。实操的时候发现了一个非常麻烦的事情:网络图片或者 base64 图片都无法直接在 canvas 里渲染显示,要先下载好传进去。

    第二种方案:后端库可以完成较为简单的需求,但字体加载、阴影、圆角、透明等方案效果需要精调,如果文字需要截断或动态伸缩长度时并不容易处理。图片的截取和伸缩自适应也不灵活。而且选用这种方案相当于需要把 UI 布局的工作丢给后端工程师去解决,这不是他们擅长的范围,效果未必会好。

    第三种方案:页面的绘制方面,纯前端技术即可完成,难度低,完成度高,但是需要在后端起一个 node 服务开启 puppeteer 去控制服务端 Chrome 浏览器。这种方案的缺点就是成本太高,我们和业界同行都测算过,结果差不多:4 核 16G 的服务器生成图片的 QPS 大概只有 10-20,相当于一秒钟较差情况只能生成 10 张图片,这对于突发的大量分享需求并不能满足,而且这种配置的服务器,不能部署其他服务,只跑这个服务就会用尽大部分资源。

    费用上:只单单算 5M 带宽的服务器费用一个月就要 700+ 人民币,流量和图片托管费用另算。此方案的最小化实现:至少需要 1 核 2G 的服务器才能较为顺畅地完成一次顺利截图,但是还是要处理浏览器无响应假死等情况,较为复杂。但综合来看,这种方案是效果最好最为灵活的。

    快海报小程序分享图生成服务

    快海报 kuaihaibao.com 是专门提供小程序分享海报生成服务的,技术上用的就是上面所述的第三种方案,但是只需要调用他的 API 就可以完成,不需要开发者维护 puppeteer 和 headless Chrome,而且成本较低,一张分享图的最低生成成本是 0.033 元。

    其实真正集成到自己的服务中时,平均成本要比这个低,因为有些生成的图片的二维码,如果不带用户个人信息(不给分享的用户返利)时,可以生成一次之后永久缓存起来,其他用户再分享同一个东西都用缓存好的图片,综合成本就降下来了。

    算一下成本:

    • 比方说一个刚起步的小程序日活 5000(对于刚起步的小程序其实已经很高了吧)
    • 假设有 5% 的用户生成分享图
    • 也就是每天生成 250 张分享图,一个月会生成 7500 张分享图

    这样的话每个月成本就是 250 元人民币左右,相比 700+ 人民币但服务器成本省太多了。这是测算比较高的指标,而且是完全不应用缓存方案的情况。

    如果你的小程序还处于冷启动的阶段:

    • 日活 500
    • 假设有 5% 的用户生成分享图
    • 也就是每天生成 25 张分享图,一个月会生成 750 张分享图

    每月成本 25 元。比 1 核 2G 的最小化自部署方案也要便宜。但带来的收益是无穷的,750 张分享图发到朋友圈,每张分享图 1000 受众浏览,一个月就是将近 750000 人次分享受众。

    调用 API

    首先去 https://kuaihaibao.com/ 注册账号,验证邮箱激活之后,其实就可以先测试用了,每个账号有 100 次测试额度,测试生成的图片带水印。

    网站左侧的 [文档] 页面能找到集成文档,非常简单,一共就只有一个核心 API,通过 HTTP 调用的。

    先在【开发】->【设置】中激活 token

    image.png

    然后打开 【开发】->【模板】中,找到自己喜欢的模版。因为我只想生成一个简单的分享图片,所以最简单的方式就是使用网站内置的模版,内置模板目前有 8 款,应该能满足大部分小程序的需求了,抽奖、打卡、图文、文字、电商都有,改一改文案和图片就可以了。

    我选了这个抽奖模板:

    image.png

    按照 https://kuaihaibao.com/doc/docs/template/kzccda95.html 文档描述的 JSON 改成我需要的:

    {
      "backgroundColor": "#fafafa",
      "backgroundImage": "",
      "user": {
        "avatar": "https://khb-sample.oss-cn-shanghai.aliyuncs.com/sample/girl_2.jpg",
        "nickname": "我是测试账号",
        "color": "#666"
      },
      "tip": "邀请你来抽奖",
      "qrcode": "https://khb-sample.oss-cn-shanghai.aliyuncs.com/sample/sample_qr_0.png",
      "records": [
        {
          "title": "一等奖",
          "desc": "2019 年 11 月 16 日 10:00 开奖",
          "image": "https://s3.cn-northwest-1.amazonaws.com.cn/res.weiyidan.com/production/10000002/4109f8e51a8f43b9816dbc8fe636e22a.jpeg"
        }
      ],
      "brand": "我的测试抽奖小程序",
      "slogan": "快来和我一起抽吧!",
      "metaColor": "#999"
    }
    

    然后打开 Terminal 做一次请求试试:

    curl -X "POST" "https://api.kuaihaibao.com/services/screenshot" \
         -H 'Authorization: Bearer 这里写你自己的 token' \
         -H 'Content-Type: application/json; charset=utf-8' \
         -d /pre>{
      "template": "kzccda95",
      "data": {
        "qrcode": "https://khb-sample.oss-cn-shanghai.aliyuncs.com/sample/sample_qr_0.png",
        "records": [
          {
            "title": "一等奖",
            "desc": "2019 年 11 月 16 日 10:00 开奖",
            "image": "https://s3.cn-northwest-1.amazonaws.com.cn/res.weiyidan.com/production/10000002/4109f8e51a8f43b9816dbc8fe636e22a.jpeg"
          }
        ],
        "tip": "邀请你来抽奖",
        "slogan": "快来和我一起抽吧!",
        "metaColor": "#999",
        "brand": "我的测试抽奖小程序",
        "backgroundImage": "",
        "backgroundColor": "#fafafa",
        "user": {
          "avatar": "https://khb-sample.oss-cn-shanghai.aliyuncs.com/sample/girl_2.jpg",
          "nickname": "我是测试账号",
          "color": "#666"
        }
      }
    }'
    

    返回了结果:

    {
      "success": true,
      "data": {
        "name": "iPhone 5",
        "image": "https://khb-test-oss.oss-cn-shanghai.aliyuncs.com/screenshot/4fa63f2a3605cbdece90c659cbccea619d9cf9fa?x-oss-process=style/test_watermark"
      }
    }
    

    打开图片地址看看:

    image.png

    速度很快,图片很漂亮,只是中间带水印,充值后成为付费用户,再生成的图片水印就自动取掉了。

    后端集成

    这里参考快海报官方给的最佳实践的逻辑参考图:

    image.png

    所以后端只需要做一件事,就是提供一个 API 给客户端用,这个 API 被调用的时候去请求快海报的服务器,再把结果返回给小程序就好了。

    展开全文
  • 微信小程序转二维码方法分享

    千次阅读 2020-05-20 18:19:11
    微信小程序转二维码方法分享 需要转码的可以看看 这个东西是看个人需求的,618就要来了,各种活动也将来袭 为了方便小程序邀请活动没法外发,这里分享下将小程序转二维码的方法 首先,你需要在电脑上打开...
  • 微信小程序分享出来的卡片,下面的方法是可以禁止用户长按转发的,但仅限于分享到群里,分享给个人依旧可以长按转发。 使用场景比如,当分享一个小程序页面是一个邀请函,要邀请特定群内的用户。群内的用户是没法...
  • 以下是18年3月底在公司内部的分享,虽然小程序对于分享回调有所限制(下文会说明),但是整体方案依然是可行的 去年做过小程序群成员相关的信息展示需求,后续常有同事来问细节。 因此把去年做完后的梳理的小结发...
  • uniapp 小程序分享功能

    万次阅读 2019-11-12 23:06:42
    最近用uniapp写了一个小程序,之前是用它来写app的,这次要求兼容微信小程序以及QQ小程序,那肯定就少不了分享这个功能,所以记录下来方便自己以后看,也希望能帮到更多的人 onShareAppMessage: function(e) { ...
  • C语言小程序分享

    千次阅读 2019-03-15 16:35:10
    上个周末的一个下午,想着随便做点什么好呢,于是整出了这么一段程序,拿出来和大家分享分享。 本程序实现的是类似一个审问模式,功能有查看输入过的答案,将最后的问题和结果保存在本地磁盘。当然这只是一个简单...
  • 在公司遇到一个需求小程序分享到朋友圈,套路就是生成小程序的二维码图片,技术思路简单点直接下载小程序二维码的图但是这么简单就不用多BB写文章分享了,复杂点就是用canvas画出一张图片效果如下。 说一下解决...
  • 微信小程序分享功能

    千次阅读 2018-08-20 23:23:07
    微信小程序分享功能 小程序风口正盛,将小程序作为获客的来源之一实在合适不过,想要让小程序的获客产生裂变,那么从将小程序的数据发送出去势在必行,本文提供以下几种方案作为数据出口,达到老拉新/口碑传播的...
  • 微信小程序 制作分享朋友圈的图片

    千次阅读 2018-03-20 18:31:09
    由于微信小程序只支持分享给朋友或者群,不支持分享到朋友圈,又有分享到朋友圈这个需求,那就要想办法实现这个需求。查阅各种资料,发现基本思路有两种,一种是后端实现,另一种是前端实现,后端实现的方式这里就不...
  • 最近比较流行的答题小程序通常会有这么一个功能,分享到群增加答题次数,分享到好友无效,那么问题来了,我们如何能够判断用户分享到的是群还是好友呢? 通过查找API文档我发现会有这个一个东西withShareTicket ...
  • 要求把普通二维码改成小程序带参二维码。。当时听完一脸懵逼的我。。。无奈。。第一次写小程序生成二维码。。一点头绪没有。。然后就。。去看官方文档。。额。。看得似懂非懂。。尴尬!!。。不说了。。直接看代码吧...
  • 浅谈小程序内嵌网页及内嵌网页跳转分享实现

    万次阅读 热门讨论 2017-12-05 15:41:16
    上个月,小程序开发内嵌web页面的功能,这个对于很多微信开发者是个重大消息。最近两天,笔者项目中有这样一个需求,支持小程序内嵌网页,并且在内嵌网页中多次跳转,分享后,点开还是在跳转之后的网页。对于这样...
  • 小程序 分享获取群信息——openGId

    千次阅读 2018-04-18 11:53:03
    最近在做小程序,主要研究方向是对群信息的处理,小程序的大部分功能是基于通过打开转发到群的小程序分享卡片来做的... 首发于个人博客 有关转发的几条 API Page.onShareAppMessage wx.showShareMenu wx....
  • 微信小程序-背景图(附教程分享

    千次阅读 2018-08-10 18:30:24
    小程序开发过程中,尤其是针对像我这样的小白可能会遇到很多的坑,那就一个一个坑的跳,一个一个坑的填,在以后开发路可能就会平坦很多(但是很多时候,却又有些无奈) 解决方法: 1、使用网络图片 2、使用...
  • 微信小程序支持分享到朋友圈了

    千次阅读 2020-07-07 23:13:31
    ,今天在测试小程序分享的时候,发现开发者工具有个按钮是灰色的,不知道什么东西,然后查了一下,发现有人说是分享到朋友圈,一看文档还真是。 不过不支持按钮触发,只支持右上角分享那里。【暂时好像只支持...
  • 很多朋友看到微信小程序里有微信步数宝换东西,但不知道这个是不是真的,其实很多商家也是真实在做活动,他是通过微信运动步数兑换积分,然后积分就可以抵用现金或者兑换礼品了。 为了鼓励大家走出家门,锻炼身体,...
  • 作者介绍:郝天翔,10年移动互联网软件行业经验,全栈高级软件工程师,微信生态开发先行者,主要参与智慧城市新零售电商领域方案的设计与实施,本次分享商业案例“喜茶Go”已落地于全国多座城市,其小程序产品设计...
  • 微信小程序从入门到精通(二) 小程序的能力

    千次阅读 多人点赞 2018-01-24 12:14:26
    上一篇blog介绍了小程序的一些基础概念和代码构成以及主要的几个文件类型( 微信小程序从入门到精通(一) 基础知识与代码构成),那么本篇blog就继续围绕官方的简易教程以及QuickStart项目来继续研究一下小程序如何...
  • 微信小程序+java后台

    万次阅读 多人点赞 2018-03-21 21:30:58
    陆陆续续经历了三个月(因为白天要实习又碰上过年玩了一阵子),从对微信小程序一无所知到完成毕设,碰到许多问题,在跟大家分享一下自己的经历和一个小程序怎么从零开始。希望像我一样的小程序初学者看了这篇文章,...
  • 从今天开始就来带领大家学习微信小程序了,只要你跟着我一步步来,相信你也可以上线一款属于自己的微信小程序 一,认识小程序 微信⼩程序,简称⼩程序,英⽂名 Mini Program Mini Program ,是⼀种不需要下载安装...
  • 我之前是做安卓开发的,前段时间帮朋友开发了一款小程序。 前端学过html+css+js的童鞋应该对里面的一些语法都都很熟悉了,这里主要说下商品加入购物车的一些逻辑,我这里用的是将商品信息的数组缓存到storage的方法...
  • 【微信小程序控制硬件①】 全网首发,借助 emq 消息服务器你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件! 【微信小程序控制硬件②】 开始微信小程序之旅,导入小程序Mqtt客户端源码,实现简单的验证和通讯...
  • 之前两篇主要是针对把小程序从手机解密出来,通过微信开发者工具打开,运行, 接着前两篇继续往下进行使用python 的execjs模块来破解mryx app 加密代码,分享片段有些是之前分享过的, 如果还在思考这个小程序的代码...
  • 出书了!实战微信小程序

    千次阅读 2017-07-07 12:05:18
    我热衷喜欢分享一些技术,也喜欢钻研一些新东西,去年微信小程序刚内测的时候,我和我的同事四个人就一起研究,恰好公司有小程序相关的项目,做项目的同时,越发感觉到小程序很有意思。在App越来越难装到手机里的...
  • 支付宝小程序初探

    千次阅读 2018-08-28 17:50:45
    持续发酵的支付小程序(下文中直接以支付宝和微信指代支付宝小程序和微信小程序)在一拖再拖的情况下,终于在8月18日正式与大家见面,忍着可能是直接扒拉微信创意的一些让人不快的...,去发现了下支付宝小程序的文档...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 134,460
精华内容 53,784
关键字:

分享的东西都带小程序