0

我在我的react-native应用程序中使用Shopify Buy 插件进行访客结账

但我面临这个问题(见下图)

问题

我还参考了https://github.com/Shopify/js-buy-sdk/issues/518的解决方案,但我的代码中没有此类问题。

请任何帮助表示赞赏。

我的代码

import Client from 'shopify-buy';

const client = Client.buildClient({
    storefrontAccessToken: my_token,
    domain: my_domain
});
export default class App extends Component {
   componentWillMount() {
      client.checkout.create().then((res) => {
         this.setState({
            checkout: res,
         });
      });
  }
  _handleAddToBagBtn = (variantID) => {  
      const checkoutId = this.state.checkout.id;  
      const lineItemsToAdd = [{'variantID': variantID, quantity: 1}];  
      client.checkout.addLineItems(checkoutId, lineItemsToAdd).then((checkout) => { 
        console.warn(checkout.lineItems);  
     });  
  }
}
render() {
   return (
      <TouchableOpacity onPress={() => this._handleAddToBagBtn(variantID)} >Click Here</TouchableOpacity>
   );
}
4

2 回答 2

2

我今天使用 Storefont API 遇到了这个问题,但解决方法如下。

您需要使用与变体关联的属性的 Base64 编码字符串,而不是variantId直接使用数值。graphql_api_id

未编码,这些看起来像这样:gid://shopify/ProductVariant/12434084921391. 您可以从产品对象中获取这些,但您也可以直接从您的数字中创建它们variantId

在您的代码中,更改此函数:

_handleAddToBagBtn = (variantId) => {  
  const checkoutId = this.state.checkout.id;
  const lineItemsToAdd = [{
    variantId: window.btoa(`gid://shopify/ProductVariant/${variantId}`),
    quantity: 1
  }];  
  client.checkout.addLineItems(checkoutId, lineItemsToAdd).then((checkout) = { 
    console.warn(checkout.lineItems);  
 });  

}

注意我也更改variantIDvariantId因为这是 Shopify 使用的标识符,而不是variantID.

就我而言,这消除了错误并返回了一个 GraphQL 模型。希望有帮助。

于 2019-08-24T15:10:15.453 回答
0

在我看来,这Client.buildClient()是回报一个承诺。你应该这样做:

const client = Client.buildClient({
    storefrontAccessToken: my_token,
    domain: my_domain
})
.then((res) => {
  console.log(res);
})
.catch((err) => {
  console.log(err);
})

您可以检查您是否收到有效响应或错误并相应地继续。

于 2018-08-10T07:20:33.200 回答