微信开发扫一扫获取商品信息_java开发微信公众号调用微信扫一扫demo - CSDN
  • 微信开放平台提供了网站码登录的接口,用于获取用户基本信息(头像,昵称)方便网站快速接入微信登录,快捷登录。需要使用登录接口,需要成为微信开放平台认证开发者(300元)才可以获得这个接口权限。 准备工作...

    微信开放平台提供了网站扫码登录的接口,用于获取用户基本信息(头像,昵称)方便网站快速接入微信登录,快捷登录。需要使用登录接口,需要成为微信开放平台认证开发者(300元)才可以获得这个接口权限。

    准备工作:

    1、准备APPID、APPSECRET
    2、准备接口地址
    3、准备REDIRECT_URI

    获取code接口

    https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    获取acess_token、openid接口

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

    获取用户信息接口:

    https://api.weixin.qq.com/sns/userinfo?access_token=access_token&openid=openid

    流程:

    1、获取CODE
    2、获取access_token、openid
    3、获取用户信息

    操作:

    1、请求CODE

    参数说明

     

    通过接口地址,拼接以上参数进行访问即可

    https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=这里填写redirect_uri&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    redirect_uri说明
    这是点击上面地址扫码后跳转的地址,跳转的地址回给你带上两个参数,code和state参数。

    state说明
    用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验。

    可以自己生成随机字符串,为了简单学习,我这里用时间戳进行MD5加密简单生成

    <?php
    $data = time();
    $state = MD5($data);
    ?>

    例如你的redirect_uri是http://www.baidu.com/login.php,那么扫码后,跳转的地址会是这样的。

    http://www.baidu.com/login.php?code=生成的code&state=生成的state

    当然redirect_uri需要进行urlEncode编码。

    <?php
    $redirect_uri = urlEncode("http://www.baidu.com/login.php");
    ?>

    最终获取CODE的访问链接就是这样的:

    <?php
    $appid = "填写你的APPID";
    $redirect_uri = UrlEncode("http://www.baidu.com/login.php");
    $data = time();
    $state = MD5($data);
    //跳转页面
    echo "<script>location.href=\"https://open.weixin.qq.com/connect/qrconnect?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_login&state=$state#wechat_redirect\";</script>";
    ?>

    然后就跳转到了一个扫码的页面了:

    2、获取access_token和openid

    通过curl向接口发起请求即可

    <?php
    //从redirect_uri得到code
    $code = $_GET["code"];
    $appid = "填写你的";
    $secret = "填写你的";
    
    //获取access_token和openid
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
    function post($url) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            $rst = curl_exec($ch);
            curl_close($ch);
            return $rst;
    }
    
    //发送请求
    $result = post($url);
    //返回接口的数据
    $arr = json_decode($result,true);
    //解析json,单独把openid和access_token取出来待会用
    $openid = $arr['openid'];
    $token = $arr['access_token'];
    ?>

    3、获取用户信息

    <?php
    //这里是接着上面的代码的
    //获取用户信息需要openid 和 access_token
    //获取用户信息
    $getinfourl = "https://api.weixin.qq.com/sns/userinfo?access_token=$token&openid=$openid";
    function getinfo($getinfourl) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $getinfourl);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            $rst = curl_exec($ch);
            curl_close($ch);
            return $rst;
    }
    
    //发送请求获取用户信息
    $info_result = getinfo($getinfourl);
    //返回接口的数据
    // echo $info_result;
    $info_arr = json_decode($info_result,true);
    $nickname = $info_arr['nickname'];
    $headimgurl = $info_arr['headimgurl'];
    
    //显示头像和昵称
    echo "<img src=\"$headimgurl\"/>";
    echo "<h2>$nickname<h2>";
    ?>

    完整代码

    code.php

    <?php
    $appid = "填写你的";
    $redirect_uri = UrlEncode("http://www.baidu.com/login.php");
    $data = time();
    $state = MD5($data);
    
    echo "<script>location.href=\"https://open.weixin.qq.com/connect/qrconnect?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_login&state=$state#wechat_redirect\";</script>";
    
    ?>

    login.php

    <!DOCTYPE html>
    <html>
    <head>
        <title>登录成功!</title>
        <style type="text/css">
            *{margin:0px;padding: 0px;}
            #headimg{
                width: 180px;
                height: 180px;
                margin:100px auto 10px;
                border-radius: 100%;
            }
    
            #headimg img{
                width: 180px;
                height: 180px;
                border-radius: 100%;
            }
    
            h2{
                text-align: center;
            }
    
            p{
                text-align: center;
                font-size: 38px;
                font-weight: bold;
                margin-top: 20px;
            }
        </style>
    </head>
    <body>
    
    </body>
    </html>
    
    <?php
    $code = $_GET["code"];
    $appid = "填写你的";
    $secret = "填写你的";
    
    //获取access_token和openid
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
    function post($url) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            $rst = curl_exec($ch);
            curl_close($ch);
            return $rst;
    }
    
    //发送请求
    $result = post($url);
    //返回接口的数据
    $arr = json_decode($result,true);
    $openid = $arr['openid'];
    $token = $arr['access_token'];
    
    //获取用户信息
    $getinfourl = "https://api.weixin.qq.com/sns/userinfo?access_token=$token&openid=$openid";
    function getinfo($getinfourl) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $getinfourl);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            $rst = curl_exec($ch);
            curl_close($ch);
            return $rst;
    }
    
    //发送请求获取用户信息
    $info_result = getinfo($getinfourl);
    //返回接口的数据
    // echo $info_result;
    $info_arr = json_decode($info_result,true);
    $nickname = $info_arr['nickname'];
    $headimgurl = $info_arr['headimgurl'];
    $errcode = $info_arr['errcode'];
    
    if ($errcode == "41001") {
        echo "<p>登录失效,请重新扫码登录<p>";
        echo "<p><a href=\"code.php\">登录</a><p>";
    }else{
        echo "<div id=\"headimg\"><img src=\"$headimgurl\"/></div>";
        echo "<h2>$nickname<h2>";
        echo "<p>登录成功<p>";
    }
    ?>

    DEMO:http://www.likeyunba.com/WX-OPEN-LOGIN/code.php

    时间:2018-1-26
    作者:TANKING
    网站:http://likeyunba.com

    学习交流微信:face6009

    展开全文
  • 微信开发(微信扫一扫商品创建

    千次阅读 2016-10-06 19:26:40
    微信公众平台开放“扫一扫”功能,同时开放相关接口供有权限的品牌所有者调用。接口支持创建、管理并发布品牌所有者的商品信息,品牌所有者可选择商品条码发布。微信同时提供多种事件推送,帮助品牌所有者实现精准...

    微信公众平台开放“扫一扫”功能,同时开放相关接口供有权限的品牌所有者调用。接口支持创建、管理并发布品牌所有者的商品信息,品牌所有者可选择商品条码发布。微信同时提供多种事件推送,帮助品牌所有者实现精准运营、数据分析等能力。

    扫一扫接口主要调用流程如下: 

     扫一扫主要流程1.png

    权限获取

    扫一扫功能申请只能在公众平台上完成,功能申请开通后将直接获得接口权限。权限包括:商品经营类目权限、商品条码号段权限。创建商品时只能使用拥有权限的类目。

    术语含义说明

    术语概念 含义
    品牌所有者 也称商户、商家,是指合法拥有品牌的企业。可以申请“扫一扫”功能。
    扫码 使用微信“扫一扫”扫描条码。
    条码 扫一扫支持录入的条码类型为EAN13和EAN8,国内常见的EAN13条码是以69开头的13位条码,前7~9位数字标记该条码的生产企业,被称为号段;最后一位为校验位,由前面的12位位数字计算得出,码方式可参考国标GB-12094-1998。
    号段 条码号段为EAN13码的前7~9位,用于确认厂商信息,保护品牌的相关权益。申请“扫一扫”权限时需提供对应资质。特别地,ENA8码的号段为其本身。
    商品主页 通过微信“扫一扫”,在微信客户端内打开,由品牌商定义的商品信息页。
    商品详情 通过点击“商品主页”头部区域,在跳转后的页面展示,由品牌商设置的商品详细信息。包括多组商品图片,多组文字描述。
    购买区入口 位于商品主页上部,点击后集中展示品牌商设置的“建议零售价”、“微信小店”、“电商链接”以及匹配到的“电商渠道”等入口和其对应价格。
    推广服务区 位于商品主页中部,提供多媒体展示、文本介绍、跳转外部链接、关注公众号、领取微信卡券等多种自定义能力。
    组件区 包括在“商品主页”打开前展示的弹窗页,以及位于“商品主页”下部的区域。用于快速突出展示该主页的核心信息,如防伪信息等。
    相关商品推荐 位于商品主页底部,展示由品牌商设置推荐的其他商品主页。
    “商品主页”术语概念对照图:

    商品主页示例.jpg

    商品创建

    获取商户信息

    使用该接口,商户可获取账号下的类目与号段等信息。

    请求示例

    HTTP请求方式:GET
    https://api.weixin.qq.com/scan/merchantinfo/get?access_token=TOKEN

    请求参数说明

    参数 是否必须 说明
    access_token 公众号的全局凭据,用于接口调用。

    返回示例

    正确的JSON返回结果如下:

    {
     "errcode": 0,
     "errmsg": "ok",
     "verified_cate_list":[
      {
       "verified_cate_id": 200531967,
       "verified_cate_name": "调味品"
      }
     ],
     "verified_firm_code_list":[8888],
     "brand_tag_list":[
      "小耿哥8",
      "testtag"
     ]
    }

    返回参数说明

    参数 是否必须
    errcode 0为调用成功,否则返回相关错误码。
    errmsg ok为调用成功,否则返回错误提示。
    verified_cate_id_list 商户类目列表,包含类目ID与对应的类目名称。
    verified_cate_id 商户类目ID,表示该账户下可用于创建商品的类目ID。
    verified_cate_name 商户类目名称,对应类目ID的名称。
    verified_firm_code_list 商户号段列表,包含该账户下有资质的条码号段。
    brand_tag_list 品牌标签列表,创建商品时传入,商户自定义生成的品牌标识字段。

    注意:商户容易忽略verified_cate_id,导致下一步商品创建失败。

    创建商品

    使用该接口,商户可以创建商品信息,设置商品主页。目前,一个账号最多支持创建10万条商品信息。

    请求示例

    HTTP请求方式:POST
    https://api.weixin.qq.com/scan/product/create?access_token=tT8VqJWVX4C-WvIG41tyelMclMZsAPFbLxbECsJvIghceqQCMB83hI5bxcInUR-amUrVsKq4bcBmF9PgooNrFA 
    POST数据格式:JSON
    POST数据例子:
    {
     "keystandard": "ean13",
     "keystr": "6900000000000",
     "brand_info":{
      "base_info":{
       "title": "扫一扫动态主页demo",
    "thumb_url":"http://mmbiz.qpic.cn/mmbiz/AhrnkhhK7rWevHib2pmq1phtply6JicADNrX6Yrvd7LzKERyic3kn3VdSsmFr5F5ibXzj9Al65yWFudmjqcWic1Qe9g/0",
       "brand_tag": "小耿哥8",
       "category_id": 0,
       "store_mgr_type": "auto",
       "store_vendorid_list":[],
       "color": "auto",
      },
      "detail_info":{
       "banner_list":[
    {"link":"http://mmbiz.qpic.cn/mmbiz/AhrnkhhK7rWevHib2pmq1phtply6JicADNic0LvlkCw7s6mZpicib7ict5MhoiaL3gPrYXpibnibOpViaYJFpic12nx4bNZcQ/0"},
    {"link":"http://mmbiz.qpic.cn/mmbiz/AhrnkhhK7rWevHib2pmq1phtply6JicADNbTfwJmlVXp9k1A80UCFL1a9icwdthmSLh0RuJ5iaKcZBwdXbOicktkwPQ/0"},
    {"link":"http://mmbiz.qpic.cn/mmbiz/AhrnkhhK7rWevHib2pmq1phtply6JicADNW4FD74oXjEyqHicE9U3H0nTCdLHibo7rRia2TFBQ6tx2Pvic92ica8Wns4Q/0"}
       ],
       "detail_list":[
        {
         "title": "产品名称",
         "desc": "微信相框moment"
        },
        {
         "title": "设计团队",
         "desc": "微信团队"
        },
        {
         "title": "设计初衷",
         "desc": "做一个简单纯粹的电子相框"
        },
        {
         "title": "产品诉求",
         "desc": "以相框为纽带,增加子女与父母长辈的沟通,用照片通过微信传递感情交流"
        }
       ]
      },
      "action_info":{
       "action_list":[
        {
         "type": "price",
         "retail_price":"12.00"
        },
        {
         "type": "link",
         "name": "banner",
         "link": "http://mp.weixin.qq.com",
    "image":"http://mmbiz.qpic.cn/mmbiz/AhrnkhhK7rWevHib2pmq1phtply6JicADNgjXTKn0j4TlfXjUOPYBDicVOmG0sdNfUOg9Lzia2g9cbjyTXmOiaB6L1g/0",
         "showtype": "banner"
        },
        {
         "type": "link",
         "name": "自定义活动1",
         "link": "http://p.url.cn/wxscan.php",
        },
        {
         "type": "link",
         "name": "自定义活动2",
         "link": "http://p.url.cn/wxscan.php",
        },
        {
         "type": "user"
        },
        {
         "type": "text",
         "text": "此处可根据品牌商需要,用于简单描述商品或活动。"
        }
       ]
      },
      "module_info":{
       "module_list":[
        {
         "type": "anti_fake",
         "native_show": "fales",
         "anti_fake_url": "weixin.qq.com"
        }
       ]
      }
     }
    }

    请求参数说明

    POST的主要结构为brand_info,包含商品基本信息base_info、商品详情信息detail_info、推广服务信息action_info和组件信息module_info四部分

    商品主页示例2.png
    参数 是否必须 说明
    access_token 公众号的全局凭据,用于接口调用。
    keystandard 商品编码标准,暂时只支持ean13和ean8两种标准。
    keystr 商品编码内容。直接填写商品条码,如“6900000000000”;注意:编码标准是ean13时,编码内容必须在商户的号段之下,否则会报错。
    base_info 商品的基本信息。
    detail_info 商品的详细描述信息。
    action_info 商品的推广服务区信息。
    module_info 商品的组件信息。

    base_info部分

    参数 是否必须 说明
    title 商品名称,建议不超过15个字,超过部分在客户端上以省略号显示。
    thumb_url 商品缩略图,推荐尺寸为180px*180px,大小不超过50k,支持jpg、png、gif、jpeg格式。
    brand_tag 品牌字段,如“宝洁海飞丝”、“宝洁飘柔”。
    category_id 商品类目ID,通过“获取商户信息”接口获取。
    store_mgr_type 是否展示有该商品的电商渠道,识别条件是编码内容。auto为自动,由微信识别展示渠道;custom为自定义,商户可指定store_vendorid_list内的渠道出现。
    store_vendorid_list 电商渠道,如果store_mgr_type为custom,则可从以下电商渠道进行选择:2为亚马逊,3为当当网,4为京东,9为一号店,11为聚美优品,19为酒仙网
    color 主页头部背景色。设置“auto”或不填则自动取色;也支持传入十六进制颜色码自定义背景色。比如,“FFFFFF”代表纯白色。注意:颜色码不识别大小写,也不需要传入“#”

    detail_info部分

    参数 是否必须 说明
    banner_list 商品详情页中可设置多张图片。
    link 商品详情页顶端横幅图片,640px*320px,单张≤200k,支持jpg、png、gif、jpeg格式,最多可上传6张。
    detail_list 商品详情页中可设置多组商品属性。
    title 商品详情页中商品属性名称,≤6个汉字。
    desc 商品详情页中商品属性内容,≤80个汉字。

    action_info部分

    参数 是否必须 说明
    action_list 商品主页中可设置多个服务栏。
    type 服务栏的类型,Media,视频播放;Text,文字介绍;Link,图片跳转;Link,普通链接;User,公众号;Card,微信卡券;Price,建议零售价;Product,微信小店;Store,电商链接;recommend,商品推荐。

    类型:视频播放

    参数 是否必须 说明
    type 服务栏类型,视频类型的参数值为"media"。
    link 对应的视频链接,仅支持在v.qq.com上传的视频内容,格式请按JSON示例拼接。
    image 对应视频的封面,推荐尺寸690px*320px,大小不超过200k,支持jpg、png、gif、jpeg格式。

    类型:文字介绍

    参数 是否必须 示例值 说明
    type text 服务栏类型。
    name 商品介绍 对应文字介绍的标题。
    text 此处可根据品牌商需要,用于简单描述商品或活动。 对应文字介绍的内容。

    类型:图片跳转

    参数 是否必须 说明
    type 服务栏类型,图片跳转类型的参数值为"link"。
    link 对应图片跳转后的网页链接。
    image 对应跳转入口的图片链接,请参考JSON示例。
    showtype 值为banner,设置图片跳转类型的服务栏时必填。

    类型:普通链接

    参数 是否必须 示例值 说明
    type link 服务栏类型。
    name 查看官网 链接入口的名称,不超过12个汉字。
    link http://www.qq.com 对应跳转后的网页链接。
    digest 点击查看 服务栏右侧的引导语,不超过5个汉字。

    类型:公众号

    参数 是否必须 示例值 说明
    type user 服务栏类型。

    类型:微信卡券

    参数 是否必须 示例值 说明
    type card 服务栏类型。
    cardid pbLatjlZyVY2XCKfIDULuD_J_PKI 卡券必须为非自定义code(概念说明见微信卡券接口文档)。
    digest 全场通用 服务栏右侧的引导语,不超过5个汉字。

    类型:建议零售价

    参数 是否必须 示例值 说明
    type price 服务栏类型。
    retail_price 12.00 表示商品的建议零售价,以“元”为单位。

    类型:微信小店

    参数 是否必须 示例值 说明
    type product 服务栏类型。
    name 官网商城 微信小店入口的名称。
    productid pLHCTjvXB6vIqUYUn51AWsK-sKA8 对应小店商品的id,需保证有效。
    digest 限时折扣 服务栏右侧的引导语,不超过5个汉字。

    类型:电商链接

    参数 是否必须 示例值 说明
    type store 服务栏类型。
    name 京东商城 电商入口的名称。
    link http://m.jd.com/product/14091549.html 对应电商的链接,建议是可以直接购买该商品的页面。
    sale_price 12.50 对应商品的价格,单位元。

    类型:商品推荐

    参数 是否必须 说明
    type 服务栏类型,商品推荐的值为recommende。
    recommend_type 表示商品推荐的方式,目前只支持指定,值为appointed。
    recommend_list 表示指定要推荐的商品列表
    keystandard 表示被推荐的商品编码格式。
    keystr 表示被推荐商品的编码内容。

    “商品推荐”的JSON示例:

    {
     "type": "recommend",
     "recommend": {
      "recommend_type": "appointed",
      "recommend_list": [
       {
        "keystandard": "ean13",
        "keystr": "6900000000001"
       },
       {
        "keystandard": "ean13",
        "keystr": "6900873042720"
       }
      ]
     }
    }

    module_info部分

    参数 是否必须 说明
    module_list 未来可设置多个组件,目前仅支持防伪组件。
    type 组件的类型,目前仅包括防伪组件anti_fake。
    native_show 设置为true时,防伪结果使用微信提供的弹窗页面展示,商户仅需调用“商品管理”部分的组件消息接口回传产品真假信息。设置为false时,无防伪弹窗效果。
    anti_fake_url 商户提供的防伪查询链接,当native_show设置为false时必填。

    注意:

    1、推广服务区action_info部分,入口数量规则如下:

    1)至少设置一个推广类型;

    2)文字介绍、公众号和微信卡券三种推广类型,每种类型最多只能分别设置1个;

    3)普通链接、公众号、微信卡券三种类型合计最多设置3个;

    4)图片跳转链接和视频播放只能二选一展示;

    2、商品主页中必须存在至少一个价格信息,价格的展示渠道有四种:

    1)在base_info中定义store_mgr_type和store_vendorid_list字段。如果商品在设置的电商渠道有销售,则会有售卖入口在【购买区】展示。例如:“洋河-天之蓝 480ml”在“京东商城”有销售,假设京东商城又在该商品设置的电商渠道列表中,则会有“京东商城”的售卖入口出现。

    2)在微信小店(Product)类型中设置productid,购买区将出现对应商品的微信小店售卖入口。

    3)在电商链接(Store)类型中设置目标地址链接(link),购买区将出现所配置的外部商城售卖入口。

    4)在建议零售价(Price)类型中设置retail_price字段。如果商品没有设置前文所述的任何一种购买渠道,也会有该商品建议零售价展示。

    返回示例

    正确的JSON返回结果如下:

    {
     "errcode": 0,
     "errmsg": "ok",
     "pid": "5g0B4A90aqc"
    }

    返回参数说明

    参数 说明
    errcode 0为调用成功,否则返回相关错误码。
    errmsg ok为调用成功,否则返回错误提示。
    pid 转译后的商品id,在微信系统内唯一区分一个商品。





    展开全文
  • 微信小程序实例详解,扫描二维码获取信息

    万次阅读 多人点赞 2018-01-09 22:25:09
    1.最简单的扫二维码获得信息。 首先,在网上找一个二维码生成网站,生成一个二维码,我用的是草料二维码,随便生成了一个二维码做测试。 就这个。 我搭建的界面如下: 如图可见,点击1中的“点我扫一扫”,...

    1.最简单的扫二维码获得信息。

    首先,在网上找一个二维码生成网站,生成一个二维码,我用的是草料二维码,随便生成了一个二维码做测试。

    就这个。

    我搭建的界面如下:

    如图可见,点击1中的“点我扫一扫”,可以扫二维码,扫错了如2所示,扫对了如3所示。“你傻不傻啊?”就是上图的二维码内容。

    嗯,大家都不傻。

    4是小程序的结构,就是快速模板建立的,index页面里的内容都删空了,替换了新的代码,其中wxss文件没有东西,因为并没有对界面进行设计。

    其中index.wxml的代码如下:

    <view>  
      <view bindtap="click">点我扫一扫</view>  
      <view>{{show}}</view>  
    </view> 
    没啥说的,就是点击“点我扫一扫”的时候,调用click函数,结果的值是show。
    index.js的代码如下:

    //获取应用实例  
    var app = getApp()
    Page({
      data: {
        show: "",
      },
    
      onLoad: function () {
        console.log('onLoad')
      },
      click: function () {
        var that = this;
        var show;
        wx.scanCode({
          success: (res) => {
            this.show = "结果:" + res.result + "二维码类型:" + res.scanType + "字符集:" + res.charSet + "路径:" + res.path;
            that.setData({
              show: this.show
            })
            wx.showToast({
              title: '成功',
              icon: 'success',
              duration: 2000
            })
          },
          fail: (res) => {
            wx.showToast({
              title: '失败',
              icon: 'success',
              duration: 2000
            })
          },
          complete: (res) => {
          }  
        })
      }
    })
    这个差不多就是微信官方文档的样板例子。
    把click函数给定义了一下,赋给了show的值。
    其中,wx.scancoad和wx.showToast是微信小程序的内置函数。
    wx.scancoad中的result是二维码的内容。
    官方文档如下:
    scancode
    https://mp.weixin.qq.com/debug/wxadoc/dev/api/scancode.html
    showToast:
    https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-react.html
    这个就改了这两个文件,wxss是空的。
    二维码扫描get了,继续下一个,跳转页面。

    本来是想做一个渐进式的教程,不过发现后面两个有点麻烦,附上参考资料吧,等有条件了,再写。

    看资料,如果想做到跳转,二维码中要有path的值,而这个的获取,要有认证过的小程序和服务号。

    access_token

    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

    获取二维码:

    https://mp.weixin.qq.com/debug/wxadoc/dev/api/qrcode.html

    生成带参数的二维码:

    https://jingyan.baidu.com/article/fdbd4277cfd0c6b89f3f485f.html



    渐进式达成目的,首先编写一个微信小程序,扫二维码,获取二维码信息,这样就get了微信小程序扫二维码的源码和技能;然后通过扫二维码跳转网页;然后扫二维码获得图片。

    1.获取二维码信息

    2.获得网址跳转网页

    3.获得图片,并显示

    再接再厉吧。
    心塞。

    展开全文
  • 作者:祈澈姑娘小程序码实现读取isbn,获取图书的各种信息接触到云函数已经有段时间了,之前一直在看api,现在自己跟着网络上的资料和视频学习,受到豆瓣读书系列的启发,决定用云函数做个项目,获取图书信息...

    作者:祈澈姑娘

    小程序扫码实现读取isbn,获取图书的各种信息

    接触到云函数已经有一段时间了,之前一直在看api,现在自己跟着网络上的资料和视频学习,受到豆瓣读书系列的启发,决定用云函数做一个项目,获取图书信息并存入云数据库。

    基本流程

    1.用户端小程序调用 wx.scanCode接口,获取到ISBN码。 2.使用ISBN码调用云函数,在请求云函数的时候,云函数会请求豆瓣的API,获取豆瓣图书信息。 3.图书信息请求到之后,会将其中无用的信息返回给小程序中,小程序中再拿出获取到的信息,创建图书条目。 4.将对应的数据直接存储到云开大的数据库里面。

    具体步骤

    下面对该项目的步骤进行一些具体的讲解以及部分关键代码的呈现。

    一、扫一扫获取图书ISBN码
    二、准备环境、安装依赖
        1.安装Node.js准备环境
        2.在cmd打开云函数目录中,安装依赖
    三、编写云函数代码
        1.在云函数中用获取到的ISBN传参
        2.编写用户端(小程序端代码)
        3.编写云函数端代码
    四、调用豆瓣API获取具体数据
    五、将获取到的API数据存入云数据库里面
        1.初始化
        2.添加数据
    六、云数据库读取的数据显示在小程序端列表里
        1.获取res.data
        2.设置界面相关数据
        3.显示和布局
        4.小程序wxml界面(主要demo)
    七、【云开发】首页列表跳转详情页
        1.新建一个详情页
        2.按钮跳转事件
        3.跳转到具体详情页
        4.关于详情页的一些代码

    一、扫一扫获取图书ISBN码

    用户端小程序调用 wx.scanCode接口,获取到图书ISBN码(图书条形码),在办公室找了一圈,找到了一本图书ISBN码,可以自动忽略我这渣渣的像素。

    关键代码

    // pages/scanCode/scanCode.js
    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
       
      },
    
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
    
      },
    
      /**
       * 生命周期函数--监听页面初次渲染完成
       */
      onReady: function () {
    
      },
    
      /**
       * 生命周期函数--监听页面显示
       */
      onShow: function () {
    
      },
    
      /**
       * 生命周期函数--监听页面隐藏
       */
      onHide: function () {
    
      },
    
      /**
       * 生命周期函数--监听页面卸载
       */
      onUnload: function () {
    
      },
    
      /**
       * 页面相关事件处理函数--监听用户下拉动作
       */
      onPullDownRefresh: function () {
    
      },
    
      /**
       * 页面上拉触底事件的处理函数
       */
      onReachBottom: function () {
    
      },
    
      /**
       * 用户点击右上角分享
       */
      onShareAppMessage: function () {
    
      },
    
    scanCode: function (event) {
    console.log(1)
      // 允许从相机和相册扫码
      wx.scanCode({
       onlyFromCamera:true,
       scanType:['barCode'],
       success:res=>{
         console.log(res.result)
       },
       fail:err=>{
         console.log(err);
       }
      })
      }
    
    })
    复制代码

    ok,获取到信息:

    二、准备环境、安装依赖

    1.安装Node.js准备环境

    安装nodejs,准备好环境,这一步就不细说了,没有安装的可以自行百度,不知道有没有安装的可以输入 node -v 查看一下。

    2.在cmd打开云函数目录中,安装依赖

    输入命令:

    npm install --production
    复制代码

    依赖安装成功之后,文件里面多会出现 package-lock.json这个文件:

    三、编写云函数代码

    1.在云函数中用获取到的ISBN传参

    云函数API:
    developers.weixin.qq.com/miniprogram…

    通过看文档可以学会,在云函数里,我们可以通过传递一份data来获取这里面的数据,然后再通过event来拿到对应的数据:

    复制这个api里面的方法:

    打开实战一里面写的小程序端的扫码的js界面,把这个方法放在 success里面。 要调用的云函数的名称 name要改成成实战二教程里面建立的云函数bookinfo

    传递的参数是 isbn,结果是扫码得到的result

    2.编写用户端(小程序端代码)

    result的结果打印出来,ok,用户端(小程序端)代码写好了:

    用户端(小程序端)代码写完了,就这些:

    // pages/scanCode/scanCode.js
    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
    
      },
    
    scanCode: function(event) {
        console.log(1)
        // 允许从相机和相册扫码
        wx.scanCode({
          onlyFromCamera: true,
          scanType: ['barCode'],
          success: res => {
            console.log(res.result)
    
            //
            wx.cloud.callFunction({
              // 要调用的云函数名称
              name: 'bookinfo',
              // 传递给云函数的参数
              data: {
                isbn: res.result
              },
              success: res => {
                console.log(res)
             
              },
              fail: err => {
                console.error(res)
              }
            })
          },
          fail: err => {
            console.log(err);
          }
        })
      }
    
    })
    复制代码

    3.编写云函数端代码

    打开 bookinfo里面的 index.js,将 event结果打印出来,请求云函数,将云函数之中的 isbn返回回来:

    // 云函数入口文件
    // const cloud = require('wx-server-sdk')
    // cloud.init()
    
    // 云函数入口函数
    //var rp = require('request-promise')
    exports.main = async (event, context) => {
     console.logI(event);
    return event.isbn 
      // var res = rp('https://api.douban.com/v2/book/isbn/' + event.isbn).then(html => {
      //   return html;
      // }).catch(err => {
      //   console.log(err)
      // })
      //return res
      // const wxContext = cloud.getWXContext()
      // return {
      //   event,
      //   openid: wxContext.OPENID,
      //   appid: wxContext.APPID,
      //   unionid: wxContext.UNIONID,
      // }
    }
    复制代码

    上传并且部署云函数:

    测试一下,云函数调用成功,返回的结果(控制台打印)是isbn:

    四、调用豆瓣API获取具体数据

    在网上找了一下,找到了一个可以用的豆瓣API:
    api.douban.com/v2/book/isb…

    打开云函数文件夹,index.js里面编写代码,引用request promise:

    var rp = require('request-promise')
    复制代码

    自定义的isbn,使用一个+号来连接,在传递一个catch来处理错误情况:

    var res = rp(
     'https://api.douban.com/v2/book/isbn/'+event.isbn).then(html=>{
    return html;}).catch(err=>{
    console.log(err)})
    复制代码

    returnresres就是对应的html,将html传给用户端:

    上传云函数:

    继续测试一下,拿到这个条形码的信息了(书本的信息):

    对于这些信息,进一步处理,拿到自己想要的信息。

    打开小程序端scanCode.js:

      //进一步的处理方法        
    
      var bookString=res.result;        
    
      console.log(JSON.parse(bookString))
    复制代码

    看到了整本图书上面的所有信息,修改这些信息,存入云数据库之中即可。

    五、将获取到的API数据存入云数据库里面

    1.初始化

    使用数据库的时候,首先要进行初始化:

    云开发数据库文档:
    developers.weixin.qq.com/miniprogram…

    打开云开发控制台创建一个集合books:

    打开小程序端js,初始化数据库:

     //云数据库初始化         
    
     const db = wx.cloud.database({});         
    
     const book = db.collection('books');
    复制代码

    2.添加数据

    js代码流程:

    // pages/scanCode/scanCode.js
    
    Page({
      data: {
      },
      scanCode: function (event) {
    console.log(1)
    // 允许从相机和相册扫码
    wx.scanCode({
      onlyFromCamera: true,
      scanType: 'barCode',
      success: res => {
    console.log(res.result)
    wx.cloud.callFunction({
      // 要调用的云函数名称
      name: 'bookinfo',
      // 传递给云函数的参数
      data: {
        isbn: res.result
      },
      success: res => {
        //  console.log(res)
        //进一步的处理
        var bookString = res.result;
        console.log(JSON.parse(bookString))
        //云数据库初始化
        const db = wx.cloud.database({});
        const book = db.collection('books')
        db.collection('books').add({
          // data 字段表示需新增的 JSON 数据
          data: JSON.parse(bookString)
        }).then(res => {
          console.log(res)
        }).catch(err => {
          console.log(err)
        })
      },
      fail: err => {
        console.error(res)
      }
    })
    
      },
      fail: err => {
    console.log(err);
      }
    })
      }
    })
    复制代码

    六、云数据库读取的数据显示在小程序端列表里

    1.获取res.data

    参考的读取api,请点击:
    developers.weixin.qq.com/miniprogram…

    初始化实例和book方法:

      //云数据库初始化    
    
      const db = wx.cloud.database({});    
    
      const book = db.collection('books')
    复制代码

    复制API这段代码获取多个记录的数据的方法,放在项目到onload方法之中:

    打印在控制台:

    2.设置界面相关数据

    拿到res.data之后,要赋值给page实例里面的data,所以在data里面设置一个默认的空数组:

    创建一个变量来保存页面page示例中的this,方便后续使用,也可以使用箭头函数来打印一下this,看是不是page示例:

    const db = wx.cloud.database({});
    
    const cont = db.collection('books');
    
    Page({
    
      data: {
    
    book\_list:[]
    
      },
    
      onLoad: function(options) {
    
       // 创建一个变量来保存页面page示例中的this, 方便后续使用
    
    var _this=this;
    
    db.collection('books').get({
    
      success: res =>{
    
     console.log(res.data);
    
     console.log(this);
    
            } 
    
        })
    
      },
    
    })
    复制代码

    直接使用this来设置data:

    3.显示和布局

    使用组件库引入,可以省略自己写很多代码的样式,简单方便,当然也可以自己写:youzan.github.io/vant-weapp/…
    因为数据不止一条,循环,所以要用到小程序框架的列表渲染:
    developers.weixin.qq.com/miniprogram…

    写好之后 wxml如下:

    <text>私家书柜</text>
    
    <view wx:for="{{book\\_list}}">
    
      <van-card num="2" price="2.00" desc="描述信息" title="商品标题" />
    
    </view>
    复制代码

    4.小程序wxml界面(主要demo)

    wxml:

    <view wx:for="{{book\\_list}}">
    
      <van-card num="2" 
    
      price="{{item.price}}" 
    
      desc="{{item.author}}" 
    
      title="{{item.title}}"  
    
      thumb="{{item.image }}" />
    
    </view>
    复制代码

    js:

    const db = wx.cloud.database({});
    
    const cont = db.collection('books');
    
    Page({
    
      data: {
    
    book_list:[]
    
      },
    
      onLoad: function(options) {
    
       // 创建一个变量来保存页面page示例中的this, 方便后续使用
    
    var _this=this;
    
    db.collection('books').get({
    
      success: res =>{
    
    console.log(res.data[0]);
    
    this.setData({
    
      book_list:res.data
    
              })
    
            } 
    
         })
    
      },
    
    })
    复制代码

    ok,云数据库读取的数据显示在小程序端列表里:

    七、【云开发】首页列表跳转详情页

    1.新建一个详情页

    打开app.json, "pages/details/details",,自动生成了一个详情页:

    2.按钮跳转事件

    打开首页列表页代码,绑定详情按钮跳转事件。

    wxml:

    <view wx:for="{{book\\_list}}">
    
      <van-card num="2" price="{{item.price}}" desc="{{item.author}}" title="{{item.title}}" thumb="{{item.image }}">
    
    <view slot="footer">
    
      <van-button size="mini" bind:click="viewitem">详情按钮</van-button>
    
    </view>
    
      </van-card>
    
    </view>
    复制代码

    继续写js里面的绑定事件,在控制台打印一下event,方便后续测试:

    viewitem: function(event) {    
    
        console.log(event)  
    
    }
    复制代码

    3.跳转到具体详情页

    要在云开发里面写一个特定的id,打开云开发控制台,数据库,需要用到这个下划线是_id的字段:

    给这个字段设置一个值,data-id="{{item._id}}"

    点击按钮,可以看到,点击不同的列表,打印的是不同的id,通过不同的id就可以看到不同的内容了:

    4.关于详情页的一些代码

    初始化db的实例:

    const db = wx.cloud.database({});
    复制代码

    打开云函数文档里面的读取数据api:

    developers.weixin.qq.com/miniprogram…

    复制此段读取数据记录的代码,放在onload里面:

    可以看到,具体数据已经打印过来了:

    这个时候还没有将数据传递到一个具体的页面实例中:

    所以,success开始改成使用箭头函数,进入页面的时候,可以看到appdata里面的book:

    具体展示:在wxml里面写上想要拿到的数据,ok,详情页面展示的数据:

    效果如下:

    这样,我们就完成了利用云开发扫码读取ISBN码并获取图书各种信息的全部步骤啦~


    转载于:https://juejin.im/post/5c81cd855188257ec43ca273

    展开全文
  • 微信公众号开发微信扫一扫

    千次阅读 2019-05-27 22:32:59
    最近开发一个食堂项目,项目中用到使用微信扫一扫实现项目中的扫一扫的功能。 1、添加点击扫一扫的触发事件的按钮 <span id="scanQRCode">扫一扫</span> 2、添加微信扫一扫的js引用 <script ...
  • 根据微信api,整理了一下调用微信扫一扫功能。如有问题请指正: 以下是具体步骤: 1、绑定域名(很关键)2、引入JS文件(很简单) script src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js">script>3、通过...
  • 微信公众号开发--微信JS-SDK扫一扫功能后台 微信公众号开发--微信JS-SDK扫一扫功能后台 微信公众号开发--微信JS-SDK扫一扫功能后台 微信公众号开发--微信JS-SDK扫一扫功能后台
  • 微信开发之调用扫一扫接口

    千次阅读 2017-12-01 22:39:33
    前言这是自己第次进行微信开发,自己之前一直以为很简单,但是自己真正来做的时候才发现会遇到很多问题。认识的个小伙伴进行微信开发已经挺久了,如果需要可以直接问他或者将他的源代码拿过来。但是想想这个项目...
  • 功能需求:微信公众号里网页需要调用扫一扫功能 实现工具:微信JS-SDK接口 接口官方文档:微信JS-SDK说明文档 微信JS-SDK介绍: 微信JS-SDK是微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包。 ...
  • 正好微信JS-SDK提供了调用微信扫一扫的功能接口,下面让我们来看看是如何实现的吧。 第一步、微信JS-SDK的使用步骤,配置信息的生成获取讲解:  关于JS-SDK的使用步骤和timestamp(时间戳),nonceStr(随机串),...
  • Java调用微信扫一扫

    千次阅读 热门讨论 2019-07-24 18:49:48
    公司公众号二次开发需要调用微信扫一扫接口,在网上查了很多相关资料感觉也不是特别的全,在此特意整理一遍资料,供给自己和大家参考,如有相关缺陷请大家指出。 步骤一:绑定域名 ...id=mp1421141115打开微信官方...
  • 由于需要调用微信扫一扫功能,所以要先配置一下微信需要的信息 1.官方接口文档:微信JS-SDK说明文档 2.配置js安全域名:登录公众号 -》公众号设置 -》功能设置 -》JS接口安全域名 开发步骤: 1.引入js文件 CDN引入...
  • 最近微信公众号网页开发项目遇到一个问题:在吊起扫一扫功能的时候,Android端正常,iOS端总是提示config:fail 或者签名失败(sigxxxxxx)Vue的项目,前几个类似的项目没遇到这种问题。这次微信配置和吊起的代码也...
  • 难点:如何调起企业微信扫一扫功能 实现步骤如下 1:注册企业微信,成为管理员,得到CORPID(企业ID,每个企业微信都有一个,企业下的所有应用都是同一个)和CORPSECRET(应用Secret,每个应用都有,各不相同) 企业...
  • 微信扫一扫功能,没开发过,求个思路或者教程。我知道要看微信开发者文档, 但是实在是搞不定啊。有没有代码demo或者,稍微详细一点教程给个啊~~ 我要做的功能的关键点是下面几个: 1、我需要给一个商品生成一个...
  • 在实现微信扫一扫功能时需要做三件事: 1.在需要调用微信扫一扫的页面加载微信的js: <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> 2.在调用接口...
  • 微信企业号或微信公众号调用扫一扫功能JS-SDK安全域名配置配置设置好之后下面就上代码java代码 JS-SDK安全域名配置 企业微信号 —— 安全域名配置需要通过验证(如下图) 微信公众 ——— 安全域名配置 设置 ——&...
  • 微信开发js文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html 自己可以先看下对应的文档,里面有介绍,主要的就是 配置js安全域名,前端配置wx.config,调用对应的接口; 首先需要...
  • Java实现微信扫一扫

    千次阅读 2016-12-27 17:44:07
    这两周做了项目关于微信端的处理,主要是实现调起微信扫一扫和通过微信获取地理位置。写在前面,不要急,这些东西对第一次开发微信端的人来说很重要: 不太善于布局,大家凑合看,主要看内容哈 我先详细的解释一些...
  • 微信公众号开发--微信JS-SDK扫一扫功能

    万次阅读 多人点赞 2016-03-02 08:55:10
    首先请阅读微信JS-SDK说明文档,了解微信JS的相关说明。 根据官方的使用步骤,关键的有以下几步 绑定域名(很关键) 引入JS文件(很简单) 通过config接口注入权限验证配置(很重要) 通过ready接口处理成功验证...
1 2 3 4 5 ... 20
收藏数 23,516
精华内容 9,406
关键字:

微信开发扫一扫获取商品信息