shopify 应用对接电商示例

前言

shopify 平台感兴趣的自己搜一下了
我这儿的业务场景是:
我方作为应用提供方,让商户接入、安装我方应用,我方通过商户返回的code拿到商户授权的 accessToken 进行接口访问

这里对应用方和商户的首次交互做个案例
shopify OAuth accessToken 生成介绍

OAuth首次交互流程

下图在官方的API文档中可以找到,这里贴了出来
在这里插入图片描述

scope列表

权限名称描述
read_analyticsView store metrics
read_assigned_fulfillment_orders, write_assigned_fulfillment_ordersView or manage fulfillment orders
read_customers, write_customersView or manage customers, customer addresses, order history, and customer groups
read_discounts, write_discountsView or manage automatic discounts and discount codes
read_draft_orders, write_draft_ordersView or manage orders created by merchants on behalf of customers
read_files, write_filesView or manage files
read_fulfillments, write_fulfillmentsView or manage fulfillment services
read_gdpr_data_requestView GDPR data requests
read_gift_cards, write_gift_cardsView or manage gift cards (Available to Plus merchants only)
read_inventory, write_inventoryView or manage inventory across multiple locations
read_legal_policies, write_legal_policiesView or manage a shop’s legal policies
read_locationsView the geographic location of stores, headquarters, and warehouses
read_marketing_events, write_marketing_eventsView or manage marketing events and engagement data
read_merchant_managed_fulfillment_orders, write_merchant_managed_fulfillment_ordersView or manage fulfilment orders assigned to merchant-managed locations
read_online_store_navigationView menus for display on the storefront
read_online_store_pages, write_online_store_pagesView or manage Online Store pages
read_order_edits, write_order_editsView or manage edits to orders
read_orders, write_orders, read_all_ordersView or manage orders, transactions, fulfillments, and abandoned checkouts from the last 60 days, or View all past and future orders
read_price_rules, write_price_rulesView or manage conditional discounts
read_products, write_productsView or manage products, variants, and collections
read_product_listings, write_product_listingsView or manage product or collection listings
read_reports, write_reportsView or manage reports on the Reports page in the Shopify admin
read_resource_feedbacks, write_resource_feedbacksView or manage the status of shops and resources
read_script_tags, write_script_tagsView or manage the JavaScript code in storefront or orders status pages
read_shipping, write_shippingView or manage shipping carriers, countries, and provinces
read_shopify_payments_accountsView Shopify Payments accounts
read_shopify_payments_bank_accountsView bank accounts that can receive Shopify Payment payouts
read_shopify_payments_disputesView Shopify Payment disputes raised by buyers
read_shopify_payments_payoutsView Shopify Payments payouts and the account’s current balance
read_content, write_contentView or manage articles, blogs, comments, pages, and redirects
read_themes, write_themesView or manage theme templates and assets
read_third_party_fulfillment_orders, write_third_party_fulfillment_ordersView or manage fulfillment orders assigned to a location managed by any fulfillment service
read_translations, write_translationsView or manage content that can be translated

java代码示例

接口


import cn.hutool.crypto.digest.HMac;
import cn.hutool.crypto.digest.HmacAlgorithm;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson2.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.ModelAndView;import javax.annotation.Resource;
import java.nio.charset.StandardCharsets;
import java.util.Properties;/*** shopify 接口* 参考文档:https://www.shopify.com/partners/blog/17056443-how-to-generate-a-shopify-api-token* @author Heng.Wei* @date 2022-10-11**/
@Slf4j
@Controller
@RequestMapping("/shopify")
public class ShopifyController {/** API key of your app. */private final static String CLIENT_KEY = "[注册的应用的API KEY]";/** 加密的密钥 */private final static String CLIENT_SECRET = "[API SECRET]";/** 摘要算法 */private final static HMac HMAC = new HMac(HmacAlgorithm.HmacSHA256, CLIENT_SECRET.getBytes(StandardCharsets.UTF_8));/** 向商户申请授权码 */private final static String AUTHORIZE_URL = "https://%s/admin/oauth/authorize?client_id=%s&grant_options[]=%s&redirect_uri=%s&scope=%s";/** 生成 accessToken 地址, 带三个参数 client_id、client_secret、code */private final static String ACCESS_TOKEN_URL = "https://%s/admin/oauth/access_token";/** 权限范围 */private final static String SCOPE = "write_product_listings,read_orders,write_products";/** 商户安装完成后的重定向地址 */private final static String REDIRECT_URI = "http://localhost:20008/shopify/generate_token";private final static String GRANT_OPTIONS = "per-user";@Resourceprivate RestTemplate restTemplate;/*** <pre>* 商户发起安装请求* </pre>** @param hmac      GET参数生成的摘要* @param host      这个参数官网没有描述* @param shop      商店域名* @param timestamp 时间戳* @author weiheng**/@GetMapping("/install")public ModelAndView index(@RequestParam("hmac") String hmac,@RequestParam("host") String host,@RequestParam("shop") String shop,@RequestParam("timestamp") String timestamp) {log.info("shop[{}], hmac[{}], host[{}], timestamp[{}]", shop, hmac, host, timestamp);String params = "host=" + host + "&shop=" + shop + "&timestamp=" + timestamp;boolean verify = verify(params, hmac, shop);if (verify) {// 校验通过String path = String.format(AUTHORIZE_URL, shop, CLIENT_KEY, GRANT_OPTIONS, REDIRECT_URI, SCOPE);return new ModelAndView("redirect:" + path);}return new ModelAndView("redirect:404");}/*** <pre>* 通过商户给的 code,生成 token 凭据* </pre>** @param hmac      HMAC SHA256 数字签名* @param code      商户给的授权码* @param host      官网未给出该字段定义* @param shop      商店域名* @param timestamp 时间戳* @author weiheng**/@GetMapping("/generate_token")public void generateToken(@RequestParam("hmac") String hmac,@RequestParam("code") String code,@RequestParam("host") String host,@RequestParam("shop") String shop,@RequestParam("timestamp") String timestamp) {log.info("shop[{}], hmac[{}], code[{}], host[{}], timestamp[{}]", shop, hmac, code, host, timestamp);String params = "code=" + code + "&host=" + host + "&shop=" + shop + "&timestamp=" + timestamp;boolean verify = verify(params, hmac, shop);if (!verify) {log.error("shop[{}], 校验未通过", shop);return;}// 校验通过 - Exchange access code for the shop tokenProperties request = new Properties();request.put("client_id", CLIENT_KEY);request.put("client_secret", CLIENT_SECRET);request.put("code", code);String path = String.format(ACCESS_TOKEN_URL, shop);JSONObject obj = restTemplate.postForObject(path, request, JSONObject.class);log.info("resultObj[{}]", obj);if (obj == null) {log.error("获取token异常, Properties[{}]", request);return;}ShopifyTokenDTO shopifyTokenDto = JSON.parseObject(obj.toJSONString(), ShopifyTokenDTO.class);log.info("shopifyTokenDto[{}]", shopifyTokenDto);// TODO 缓存 商户 的 token 凭据}/*** <pre>* 请求有效性校验* </pre>** @param params ASCII排序后的参数 URL格式的参数,如  a=111&b=222&c=333* @param hmac   调用方传过来的摘要信息* @param shop   商户域名* @return 校验是否通过* @author weiheng**/private boolean verify(String params, String hmac, String shop) {String digest = HMAC.digestHex(params.getBytes(StandardCharsets.UTF_8));boolean verify = HMAC.verify(digest.getBytes(StandardCharsets.UTF_8), hmac.getBytes(StandardCharsets.UTF_8));log.info("shop[{}], digest[{}], verify[{}]", shop, digest, verify);return verify;}}

自定义 token 实体


import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;import java.io.Serializable;/*** <pre>* shopify 商户返回的token信息* </pre>* @author Heng.Wei* @date 2022-10-11**/
@Data
public class ShopifyTokenDTO implements Serializable {@JSONField(name = "access_token")private String accessToken;private String scope;@JSONField(name = "expires_in")private Integer expiresIn;@JSONField(name = "associated_user_scope")private String associatedUserScope;private String session;@JSONField(name = "account_number")private String accountNumber;@JSONField(name = "associated_user")private ShopifyUserDTO associatedUser;
}

自定义实体类 ShopifyUserDTO


import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;import java.io.Serializable;/*** <pre>* shopify associated user* </pre>* @author Heng.Wei* @date 2022-10-11**/
@Data
public class ShopifyUserDTO implements Serializable {private Long id;@JSONField(name = "first_name")private String firstName;@JSONField(name = "last_name")private String lastName;private String email;@JSONField(name = "account_owner")private Boolean accountOwner;private String locale;private Boolean collaborator;@JSONField(name = "email_verified")private Boolean emailVerified;
}

亲测OK,上图

这里拿到 token 就算完事儿了
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/59315.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取聊天窗口内容

技术特点&#xff1a; 1.支持群和个人聊天。 3.支持获取群成员。 4.支持获取任意当前可见信息。 5.程序封装为dll,一个傻瓜api调用即可。 6.代码为VC代码&#xff0c;不依赖.net平台。 7.代码无注入、无驱动、保证秒过各种杀软。 以上所述技术方式与本博客之前所述其它方…

职场沟通利器(2):770页酷炫PPT模板

想在述职的时候让老板眼前一亮&#xff1f;想快速抓住客户的眼球&#xff1f;下面我们提供770页酷炫的PPT模板&#xff0c;让你在职场的沟通上胜出&#xff01; 文末有福利&#xff01;

干货:38页PPT教你如何快速了解一个行业

9个最有用的方法论和示例&#xff0c;2个行业的通用分析框架&#xff0c;一份PPT教你如何深入了解一个行业&#xff0c;包括 ➊如何建立知识体系 ➋如何找到合适的主题 ➌如何确定分析框架 ➍如何寻找数据源 ➎分析报告的编写流程与标准 ➏行业分析案例 ➐常用的方法论… End 如…

分享63个公司介绍PPT模板,总有一款适合你

下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载后可以看到。 链接&#xff1a;https://pan.baidu.com/s/1XgT6QEMsrgypRcrpaA-URA 提取码&#xff1a;rr4d 大气实用公司企业介绍PPT模板 精美企业公司介绍宣…

【高效工具】分享几个高质量PPT模板

分享几个年底用的PPT模板&#xff0c;下面是截图示例和相应的下载地址。 年终总结用PPT模板&#xff08;下载地址&#xff09; 述职报告用PPT模板 点击下载 工作计划用PPT模板 下载地址

ppt转为6页pdf讲义

在PPT文件另存为PDF文件的设置窗口中&#xff0c;可以设置一页PDF显示六张幻灯片&#xff0c;具体操作请参照以下步骤。 1、首先在电脑上打开一个PPT文件&#xff0c;然后编辑好幻灯片。 2、然后在PPT“office按钮”的下拉菜单中&#xff0c;依次执行“另存为/PDF或XPS”选项。…

达叔926词汇pdf单词提取、保存

需求&#xff1a;将pdf中的单词&#xff0c;通过正则表达式提取&#xff0c;保存到excel。将excel文件另存为.csv格式,导入到anki制成卡牌学习。 注&#xff1a;因为本人是业余&#xff0c;水平有限&#xff0c;如果讲解有错误&#xff0c;欢迎指正。另外&#xff0c;本文使用的…

Instant economics 即时经济 经济学人中英双语对照精读笔记

文 / 王不留&#xff08;微信公众号&#xff1a;王不留&#xff09; 选自TE20211023&#xff0c;Leaders Instant economics 即时经济 A realtime revolution in economics could make the world better off. 经济领域的实时革命可以让世界更好。 Better off 更好的状态 Does…

chatgpt赋能python:Python图片处理-打造一张酷炫的图片

Python图片处理-打造一张酷炫的图片 作为一名有10年Python编程经验的工程师&#xff0c;我一直对Python图片处理领域深入研究&#xff0c;今天我想谈论一下如何利用Python给图片添加一些酷炫的效果。本篇文章将介绍一些Python库和技术来处理图片&#xff0c;即使您是一个初学者…

数字营销人如何使用ChatGPT提升效能?

在数字营销的领域&#xff0c;速度、专业和创意是决定成功的关键因素。今天&#xff0c;我们就来看看如何利用ChatGPT提升数字营销人的工作效能。 ●此图片由Lexica 自动生成&#xff0c;输入&#xff1a;White collar workers who are working crazy overtime 1. 优化文案创作…

起底算力产业链,谁撑起了数字经济的繁荣?

图片&#xff5c;Photo by introserv ©自象限原创 作者&#xff5c;程心、罗辑 编辑&#xff5c;云天明 “过去一年我国数字经济规模突破50万亿,占GDP比重提升至41.5%,超过我们经济比重的四成。数字经济正在成为时代的重要增量之一。” 6月20日&#xff0c;在《时代的增…

张勇主导阿里变革:设六大业务集团还均可上市 打造敏捷组织

雷递网 雷建平 3月28日 阿里巴巴集团正在发起阿里历史上最大规模的组织变革&#xff0c;广度、深度前所未有。 2023年3月28日晚&#xff0c;阿里巴巴集团董事局主席、CEO张勇作出了决定&#xff1a;将成立阿里云智能、电商、海外、本地生活服务、菜鸟、大文娱六大业务集团和多家…

大模型的淘金时代,HPE给出了一份智能经济“奇点”攻略

进入2023年&#xff0c;ChatGPT引发了一个新的AI时代——大模型时代。陆奇说&#xff1a;“我已经跟不上大模型时代的狂飙速度了&#xff01;”大模型引发了AI产业整体升级换代&#xff0c;各种大模型层出不穷&#xff0c;科技公司纷纷入局&#xff0c;AI创业公司再次雨后春笋般…

文心一言的蝴蝶振翅,云计算的飓风狂飙

ChatGPT带来的多米诺效应正在不断涌现。社会各界都在关注一系列问题&#xff0c;比如中国版ChatGPT什么时候能来到&#xff1f;其效果如何&#xff1f;类ChatGPT应用的投资与创业前景会怎样&#xff1f;相关产品能带来哪些应用价值&#xff1f; 随着百度文心一言等产品相继官宣…

大厂赶超ChatGPT

ChatGPT上线的两百天里&#xff0c;国内大模型发展开启“狂飙”模式。 据称&#xff0c;中国10亿参数规模以上的大模型已发布79个。 大模型进化场&#xff0c;讲究一个百模混战&#xff1a;百度文心大模型已进化至3.5形态&#xff1b;阿里通义千问构建家族模式&#xff1b;京…

语音合成数据解决方案助您获取专属AI声音

在2020年小米开发者大会&#xff08;MIDC&#xff09;上&#xff0c;小米宣布小爱同学5.0正式上线。小爱同学在声音体验上做了很多创新&#xff0c;如奶萌泡芙童声、多情感语音、粤语合成、定制声音等。 在语音合成技术的支持下&#xff0c;小爱同学做了很多创新 小爱同学声音…

whisper 语音识别AI 声音To文字

whisper介绍 Whisper 是一个由 OpenAI 训练并开源的神经网络&#xff0c;功能是语音识别,能把语音转换为文字,在英语语音识别方面的稳健性和准确性接近人类水平。 1、Whisper支持语音转录和翻译两项功能并接受各种语音格式&#xff0c;模型中、英、法、德、意、日等主流语言上…

人工智能:通过Python实现语音合成的案例

今天给大家介绍一下基于百度的AI语音技术SDK实现语音合成的案例&#xff0c;编程语言采用Python&#xff0c;希望对大家能有所帮助&#xff01; 注册百度AI平台应用 百度AI开放平台-全球领先的人工智能服务平台 首先登陆自己的百度账户&#xff0c;打开百度的AI开发平台页面 搜…

2023年,这几个AIOps新趋势不容忽视

文源自于公众号——布博士&#xff08;擎创科技资深产品专家&#xff09; 前言&#xff1a; 近年来&#xff0c;人工智能技术的研究和行业应用急剧上升。即使看起来人工智能技术似乎只是一种来自电影中的幻想&#xff0c;但无可否认的是人工智能技术已经在我们生活的各个方面得…

移动端(iOS,android)上那些炒股软件的K线图,分时图,都是怎么实现的?

具体回答网址&#xff1a; http://www.zhihu.com/question/30989362 类似的K线图有没有开源的控件&#xff1f;可以参考腾讯的自选股&#xff0c;百度股市通这两个进行说明。 添加评论 分享 按投票排序 按时间排序 7 个回答 20赞同 反对&#xff0c;不会显示你的姓名 臧其龙…