美文网首页
magento2访问restapi,webapi的方法

magento2访问restapi,webapi的方法

作者: 一团小糖糖 | 来源:发表于2021-11-19 21:38 被阅读0次

    magento访问api有几种方式:

    • Token-based authentication
    • OAuth-based authentication
    • OAuth error codes
    • Session-based authentication

    我们主要介绍第一种:基于token验证,访问api。


    使用token方式访问webapi有几种方式:

    Token 类型 描述 有效时间
    Integration 商家确定集成可以访问哪些 Magento 资源。 不定。 它一直持续到被手动撤销。
    Admin 商家确定管理员用户可以访问哪些 Magento 资源。 4 hours
    Customer 将访问授给如下资源 anonymous 或者self 权限. 1 hour

    integrations(集成)token
    说明:使用integrations创建的token没有时间限制,除非手动删除。
    创建步骤说明
    第一步,登录后台,导航到 System — Extensions — Integrations

    image

    第二步,点击 Add New Integration
    第三步,在名称字段中输入integrations的唯一名称。 然后在您的密码字段中输入您的管理员密码。 将所有其他字段留空。


    image

    第四步,点击 API 选项卡。 选择integrations可以访问的 Magento 资源。 您可以选择所有资源,也可以选择自定义列表。(我们这里作为测试演试,选择全部,即将所有magento的api资源全部开放)


    image

    第五步,点击保存以保存更改并返回到集成页面。


    image

    第六步,点击新创建的集成对应的网格中的Activate链接。
    第七步,点击Allow,会弹出一个层,显示api的token信息。


    image

    第八步,查看token信息,我们可以在上一步弹出的信息中复制token信息保存,如果没有复制,可以点击列表的编辑按钮,进入详情页面查看复制。
    拉到页面底部,可以看到生成的token记录:


    image

    Admin类型的token
    Magento 为管理员和customer提供单独的token服务。通过用户的username和password信息换取token.

    Magento Web API 框架允许访客用户访问配置为anonymous权限级别的资源。
    使用admin用户获取token
    使用postman工具发送一个post请求,并传递参数username,password.
    请求的地址为:
    http://example.com/rest/V1/integration/admin/token

    image

    注意:我这里的项目是安装在二级目录magento下面,因此,我的访问地址为:
    192.168.31.58/magento/rest/V1/integration/admin/token
    这里的192.168.31.58/magento相当于域名。
    在请求返回的信息中我们拿到一个字符串:dyw79saded46eppkw555iek6w0y4h16a
    这个字符串即为获取到的AccessToken。
    注意,每次请求获取token接口,都会得到一个新的token。

    使用admin帐户获取的AccessToken有效期为4个小时。


    创建一个指定的api用户,授权访问指定资源
    通常admin用户的权限较大,我们可以创建一个指定的角色和指定的管理员用户,把该用户添加到角色中,专门用于访问指定的api。
    第一步,创建角色。
    依次导航到 System — Permissions — User Roles

    image

    第二步,点击右上角Add New Role,添加新的角色。


    image

    输入角色名,和管理员密码,保存.
    第三步,选择该角色的权限,即可访问的资源。


    image

    第四步,保存,返回角色列表。


    image

    第五步,点击我们新建的角色,进入详情。


    image

    进入详情页面后,在左侧选项卡多了一个Role Users,在右侧选择管理员和户添加到该角色。
    由于我的环境只有一个admin用户,帮此处没有显示其它管理员。
    我们可以在后台添加一个管理员用户,并把该用户添加到该角色下。
    使用该管理员用户获取token的步骤同admin用户方式相同。

    该用户仅限于访问sales模块相关的api。


    使用代码获取token,访问api示例。
    上面的示例中,我们使用postman获取token。
    下面讲解如何通过程序获取token,访问api。
    示例1:获取AccessToken

    $url = 'http://192.168.31.58/rest/V1/integration/admin/token';
    
    $ch = curl_init($url);
    
    $body = json_encode(['username' => 'admin', 'password' => 'admin123']);
    
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', "Content-Lenght: " . strlen($body)));
    
    $access_token = curl_exec($ch);
    
    

    示例2:通过api创建订单。

    <?php
    $access_token = '4v81lfihtkqanfdr6798zj352qyuyx1x';
    
    //Get Cart Id String
    $url = 'http://192.168.31.58/rest/V1/guest-carts/';
    
    $ch = curl_init($url);
    
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bearer ' . $access_token));
    
    $result = curl_exec($ch);
    
    $cartId = str_replace('"', '', $result);
    
    //Get Quote Id and Item Id
    $body = json_encode(['cartItem' => ['quote_id' => $cartId, 'qty' => 1, 'sku' => '24-MB04']]);
    
    $url = 'http://magento2.local/index.php/rest/V1/guest-carts/'. $cartId . '/items';
    
    $ch = curl_init($url);
    
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bearer ' . $access_token));
    
    $result = curl_exec($ch);
    
    $obj = json_decode($result);
    
    var_dump($obj);
    
    $body = json_encode([ 'addressInformation' =>[
        'shippingAddress' => [
            "country_id" => 'US',
            "street" =>[
                "123 Main Str"
            ],
            "company" => "Company",
            "telephone" => "123456",
            "postcode" => "91780",
            "city" => "El Monten",
            "firstname" => "Guo",
            "lastname" => "Jing",
            "region_id" => "12",
            "region" => "California",
            "email" => "dummy@example.com",
            "sameAsBilling" => 1
        ],
        'billingAddress' => [
            "country_id" => 'US',
            "street" =>[
                "123 Main Str"
            ],
            "company" => "Company",
            "telephone" => "123456",
            "postcode" => "91780",
            "city" => "El Monten",
            "firstname" => "Guo",
            "lastname" => "Jing",
            "region_id" => "12",
            "region" => "California",
            "email" => "dummy@example.com",
        ],
        "shipping_method_code" => "flatrate",
        "shipping_carrier_code" => "flatrate" 
        ]
    ]);
    
    $url = 'http://magento2.local/index.php/rest/V1/guest-carts/'. $cartId . '/shipping-information';
    
    $ch = curl_init($url);
    
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bearer ' . $access_token));
    
    $result = curl_exec($ch);
    
    var_dump($result);
    
    $body = json_encode([
        "paymentMethod" => [ 
            "method" => "checkmo"
        ]
    ]);
    $url = 'http://192.168.31.58/rest/V1/guest-carts/'. $cartId . '/order';
    
    $ch = curl_init($url);
    
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bearer ' . $access_token));
    
    $result = curl_exec($ch);
    
    var_dump($result);
    
    curl_close($ch);
    

    本文转载自:Magento中文网

    相关文章

      网友评论

          本文标题:magento2访问restapi,webapi的方法

          本文链接:https://www.haomeiwen.com/subject/jdbetrtx.html