- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将我的 woocommerce rest api 与角度 6 连接。
export class RestService {
_urlwc = 'http://127.0.0.1/wp-json/wc/v2/products'; //woocommerce
_urlwp = 'http://127.0.0.1/wp-json/wp/v2/posts'; //wordpress
constructor(private http: HttpClient) { }
getPosts() {
return this.http.get(this._urlwp);
}
getProducts() {
let headers = new HttpHeaders();
headers = headers.append("Authorization", "Basic " + btoa("ck_9c9293adb7d3fb19f60a1dccd0cb5d4a251e9e03:cs_77a221d4655d5fb8fc2a5c85b7259c2364d59a8c"));
headers = headers.append("Content-Type", "application/x-www-form-urlencoded");
return this.http.get(this._urlwc, { headers: headers });
}
}
只有 Wordpress get 方法即使在未经授权的情况下也能正常工作,但 Woocommerce 给我未授权的 401 代码!! [我已经创建了消费者 key 和 secret ]
然后我尝试使用具有不同身份验证的 Postman,例如
OAuth 1.0 与 postman 配合良好。
我如何使用 woocommerce api 实现身份验证 angular 6?
或者我如何像 postman 一样在 Angular 6 中使用 OAuth 1.0?
Postman Screenshoot
最佳答案
使用以下方法创建服务:
ng g s services/woocommerce
这将在目录 src/app/services/woocommerce
下创建文件 woocommerce.service.spec.ts
和 woocommerce.service.ts
>
在woocommerce.service.ts
中添加如下代码(注意:需要安装crypto-js : https://github.com/brix/crypto-js):
import { Injectable } from '@angular/core';
import hmacSHA1 from 'crypto-js/hmac-sha1';
import Base64 from 'crypto-js/enc-base64';
@Injectable({
providedIn: 'root'
})
export class WoocommerceService {
nonce: string = ''
currentTimestamp: number = 0
customer_key: string = 'ck_2e777dd6fdca2df7b19f26dcf58e2988c5ed1f6d';
customer_secret: string = 'cs_0176cb5343903fbaebdd584c3c947ff034ecab90';
constructor() { }
authenticateApi(method,url,params) {
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
this.nonce ='';
for(var i = 0; i < 6; i++) {
this.nonce += possible.charAt(Math.floor(Math.random() * possible.length));
}
this.currentTimestamp = Math.floor(new Date().getTime() / 1000);
let authParam:object ={
oauth_consumer_key : this.customer_key,
oauth_nonce : this.nonce,
oauth_signature_method : 'HMAC-SHA1',
oauth_timestamp : this.currentTimestamp,
oauth_version : '1.0',
}
let parameters = Object.assign({}, authParam, params);
let signatureStr:string = '';
Object.keys(parameters).sort().forEach(function(key) {
if(signatureStr == '')
signatureStr += key+'='+parameters[key];
else
signatureStr += '&'+key+'='+parameters[key];
});
let paramStr:string = '';
Object.keys(params).sort().forEach(function(key) {
paramStr += '&'+key+'='+parameters[key];
});
return url+'?oauth_consumer_key='+this.customer_key+'&oauth_nonce='+this.nonce+'&oauth_signature_method=HMAC-SHA1&oauth_timestamp='+this.currentTimestamp+'&oauth_version=1.0&oauth_signature='+Base64.stringify(hmacSHA1(method+'&'+encodeURIComponent(url)+'&'+encodeURIComponent(signatureStr),this.customer_secret+'&'))+paramStr;
}
}
authenticateApi
函数构建并返回用于 woocommerce api 调用的 url。代码是不言自明的,我不会解释它,但为了以防万一引用 this link 关于如何构建 url。它实际上更多地是关于构建 auth-signature
参数。
以下是我们将如何在任何组件中使用此服务,例如我们导入此服务的产品组件:
从 '../services/wordpress/wordpress.service' 导入 { WordpressService };
同时导入 Router 和 ActivatedRoute 如下:
import { Router, ActivatedRoute } from '@angular/router';
我们希望它获取 url 的 slug 部分。为此,请按如下方式在构造函数中传递参数:
constructor(private woocommerce: WoocommerceService, private http: HttpClient, private router: Router, private route: ActivatedRoute) {
this.route.params.subscribe( params => this.productSlug = params.slug )
}
在这里,我们将使用 woocommerce 服务。我们创建了 httpclient 来向 woocommerce api 发出 http 请求,并激活了获取产品 slug 的路由。 params.slug
指的是角度路由中使用的变量,即
{
path: 'product/:slug',
component: ProductComponent
},
您还需要在组件中创建 productSlug 变量来保存 slug:
productSlug: string;
在 ng init 上,调用服务:
ngOnInit() {
this.params = {slug:this.productSlug}
let producturl:string = this.woocommerce.authenticateApi('GET','http://localhost/shop/wp-json/wc/v2/products',this.params);
this.http.get(producturl).subscribe((wc_data:any) => {
this.product = wc_data[0];
this.params = {}
let productvariationurl:string = this.woocommerce.authenticateApi('GET','http://localhost/shop/wp-json/wc/v2/products/'+this.product.id+'/variations',this.params);
this.http.get(productvariationurl).subscribe((wc_pv_data:any) => {
this.productVariations = wc_pv_data;
});
this.params = {include:this.product.related_ids}
let productrelatedurl:string = this.woocommerce.authenticateApi('GET','http://localhost/shop/wp-json/wc/v2/products',this.params);
this.http.get(productrelatedurl).subscribe((wc_r_data:any) => {
this.productRelated = wc_r_data;
});
});
}
如您所见,我在这里获得了所有带有特定 slug 的产品。然后获取该产品的所有变体,并获取相关产品这是产品组件的完整代码:
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { WoocommerceService } from '../services/woocommerce/woocommerce.service';
import { Router, ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-product',
templateUrl: './product.component.html',
styleUrls: ['./product.component.scss']
})
export class ProductComponent implements OnInit {
product: any;
productVariations: any;
selectedvariation: number;
selectedquantity: number;
productRelated: any;
productSlug: number;
variationSelected: string;
params: object = {}
constructor( private woocommerce: WoocommerceService, private http: HttpClient, private router: Router, private route: ActivatedRoute) {
this.route.params.subscribe( params => this.productSlug = params.slug )
}
ngOnInit() {
this.params = {slug:this.productSlug}
let producturl:string = this.woocommerce.authenticateApi('GET','http://localhost/shop/wp-json/wc/v2/products',this.params);
this.http.get(producturl).subscribe((wc_data:any) => {
this.product = wc_data[0];
this.params = {}
let productvariationurl:string = this.woocommerce.authenticateApi('GET','http://localhost/shop/wp-json/wc/v2/products/'+this.product.id+'/variations',this.params);
this.http.get(productvariationurl).subscribe((wc_pv_data:any) => {
this.productVariations = wc_pv_data;
});
this.params = {include:this.product.related_ids}
let productrelatedurl:string = this.woocommerce.authenticateApi('GET','http://localhost/shop/wp-json/wc/v2/products',this.params);
this.http.get(productrelatedurl).subscribe((wc_r_data:any) => {
this.productRelated = wc_r_data;
});
});
}
}
关于rest - 角度 6 woocommerce REST 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52177791/
对于游戏,我正在尝试计算我正在看的位置与场景中另一个对象的位置之间的角度。我通过使用以下代码获得了角度: Vec3 out_sub; Math.Subtract(pEnt->vOrigin, pLoc
我还是 Firebase 的新手。有什么方法可以使用 Firebase 性能监控从控制台自动逐屏监控我们的 Web 应用程序?我检查了文档,它说我们需要在代码中添加一些跟踪来跟踪(如果我弄错了,请纠正
我正在使用 angular-material2 的复选框。目前复选框的默认颜色为紫色。 看起来他们已将复选框的默认颜色从“主要”更改为重音。 有没有办法在不覆盖 css 的情况下获得“主要”(绿色)颜
Angular-Material 中是否有任何分页指令可与 md-list 一起使用? 这些确实有效,但不是基于 Material 设计的。 https://github.com/brantwills
所以我有一个configmap config.json { "apiUrl": "http://application.cloudapp.net/", "test": "1232" } 称为“连续部署
我可以成功对图像进行阈值处理并找到图像的边缘。我正在努力尝试的是准确地提取黑色边缘的 Angular 。 我目前正在使用黑色边缘的极端点,并使用atan2函数计算 Angular ,但是由于混叠,根据
我需要一些帮助来计算点的角度: 我需要计算从点 (0,0) 到从图像中提取的点的角度。 1 将是 0*,2 大约是 40-44* 等。 我的问题是 atan2 显示的值不正确。atan2 的当前输出是
好的,所以我有一个运动场 512x512环绕,-32变成 512对于x和 y . 现在我需要计算两个实体之间的角度,我有以下代码作为一种解决方法,它在大多数时间都有效,但有时仍然会失败: Shoote
我有一个组件,它有一个子组件。子组件有一个按钮,可以打开一个 Material 对话框。 在对话框中,我们有表单、用户名和密码以及提交按钮。当我提交时,我正在调用后端 REST api。 这在子组件中
我一直在试图找到2之间的差异,但是要减去这个就没有运气了 The primary diff erence between the two representations is that a quate
我在 Angular Material Expansion 面板中遇到了这个问题。部分分页下拉菜单被切断。如何使下拉菜单与扩展面板的末端重叠?我尝试了 z-index 但没有成功。 Material
我正在创建一个PapperSoccer项目,但是在寻找运动/线条的方向时遇到了问题。我正在使用HoughLinesP来检测行,并且效果尽可能好。 我使用ROI,在其中寻找一行,然后相应地移动它。 到目
我正在寻找修改构建函数输出的方法 ng build --prod 想添加一些引导CSS文件到index.html的head部分,更改名称index.html => index.php等 怎么做? 最佳
如何获得两个单位向量之间的 x、y 和 z 旋转值?我不能使用点积,因为它只给我一个值。我想使用旋转矩阵在每个轴上旋转,对于那些我需要每个轴上的角度差。我尝试了仅两个组件的点积,但我有点困惑。有没有一
我必须计算图像中每条可检测线的斜率(或角度)。如果可能的话,甚至可以检测直线斜率的变化。我已经执行了 2D 傅立叶并且我知道每个区域的邻域平均角度(64x64px 的集合)。我什至尝试了 Hough
我正在使用Tiled map 编辑器创建简单的平铺 map 。在我的 map 中,我有几个矩形,如果我创建一个宽度为 50、高度为 10 的矩形并将其精确旋转 90°,则保存 map 并将其加载到我的
我计算了一个三角形的角度,但我不明白为什么我得到一些锐角的负角。例如: var sin = Math.Sin(4.45); var radians = Math.Atan(sin); var
我正在开发一个机器学习项目,其中使用 TensorFlow(和 DNNRegressor)。我想预测范围在 -pi 和 pi 之间的模算术值(角度)。当我尝试“正常方式”执行此操作时,模型不是很好,因
我有一个包含 40 个旋转图像的图像。 图像索引实际上从 0. 0-39 开始。 这是将 0-39 转换为度数的代码 int image_direction = 0; //Can be 0-39 in
在 PostGIS/PostgreSQL 中,是否有一个函数可以给出给定点所在的线串的线段的角度? 最佳答案 在 PostGIS 版本 1.5.3 上 ST_Azimuth()需要两点作为输入——据我
我是一名优秀的程序员,十分优秀!