Netlify、Lambdas、Stripe 和 Googlebots

问题描述

我一直在开发一个带有 React 的 SPA,我已经在 Netlify 上部署了它。该应用程序使用 stripe.js 作为一种付款方式。虽然 Stripe 的所有功能用户端似乎都运行良好,但我们在使用 Google Search Console 时遇到了问题。似乎 Googlebot 抓取工具被 Stripe robots.txt 文件阻止了。基本上,最终目标是获得 google adsense 的批准,在多次拒绝(即使有预渲染和添加更多内容)之后,我们仍然被拒绝。当我们尝试使用 google 搜索控制台查看 google bot 爬虫看到的内容时,我们绝对没有错误,该站点对移动设备友好,但我们收到了如下所示的错误。虽然我显然无法控制他们对 Stripes robots.txt 文件的使用,但搜索控制台也告诉我这一点:

留言: 从源“https://m.stripe.network”访问“https://m.stripe.com/6”的 XMLHttpRequest 已被 CORS 策略阻止:不存在“Access-Control-Allow-Origin”标头在请求的资源上。

来源: https://m.stripe.network/inner.html#url=https%3A%2F%2Fwww.stateiqtest.org%2F&title=&referrer=&muid=NA&sid=NA&version=6&preview=false:0

我想提到的最后一件事是所有的条带功能都是通过 netlify 从无服务器 Lambda 函数访问和调用的...我很困惑为什么 CORS 问题是机器人的政策,而不是网站用户的政策?我正在附加我刚刚启用 cors 策略的 stripe lambda 函数调用……但是再一次……为什么我必须这样做?如果我没有从用户端收到控制台中的错误,那么机器人为什么无法访问它?我已经尝试了从更改 netlify.toml 文件添加不允许提供的 Stripe URL 的 robots.txt 文件的所有方法。任何线索?让我知道!已经感谢您的帮助! :)

//client sides
import {loadStripe} from "@stripe/stripe-js"

export async function handleFormSubmission(event) {
  event.preventDefault();

  const form = new FormData(event.target);

  const data = {
    sku: form.get('sku'),quantity: Number(form.get('quantity')),};


  const response = await fetch('/.netlify/functions/create-checkout',{
    method: 'POST',headers: {
      'Content-Type': 'application/json',"Access-Control-Allow-Origin": "*","Access-Control-Allow-Headers": "Content-Type","Access-Control-Allow-Methods": "GET,POST",},body: JSON.stringify(data),}).then((res) => res.json())
  const stripe=await loadStripe(response.publishableKey);
  const {err}=await stripe.redirecttocheckout({
    sessionId:response.sessionId
  })


  if(err){
    console.log(err)
  }
}

老实说,我要承认我有一段时间没有使用过条纹并且直到现在还没有遇到问题,因此我正在重新审视代码。这是我认为发出请求并创建条带结帐的另一个函数...

const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
const inventory = require('./data/products.json');

exports.handler = async (event) => {
  const { sku,quantity } = JSON.parse(event.body);
  const product = inventory.find((p) => p.sku === sku);
  const validatedQuantity = quantity > 0 && quantity < 2 ? quantity : 1;

  const session = await stripe.checkout.sessions.create({
    payment_method_types: ['card'],billing_address_collection: 'required',success_url: `${process.env.URL}/success`,cancel_url: process.env.URL,line_items: [
      {
        name: 'Cognitive Analysis',currency:'USD',amount: 299,quantity: 1
      },],});

  return {
    statusCode: 200,body: JSON.stringify({
      sessionId: session.id,publishableKey: process.env.STRIPE_PUBLISHABLE_KEY,}),headers: {
        "Access-Control-Allow-Origin": "*",}
  };
};

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...