【问题标题】:Accessing Jquery Key/Values in Python在 Python 中访问 Jquery 键/值
【发布时间】:2017-03-27 08:07:20
【问题描述】:

我有一个简单的表单,我需要访问表单的 jquery 代码的键/值和属性。此外,当我尝试使用 request.form['stripeToken'] 在我的视图中创建客户时,它会给出问题末尾提到的错误。我需要使用键/值属性访问 Jquery 脚本中的以下字段:

$("#stripeToken").val(token.id);
$("#stripeEmail").val(token.email);

以下是代码:

jQuery 代码:

<form id="myForm" action="/yearly" method="POST">

<input type="hidden" id="stripeToken" name="stripeToken" />
<input type="hidden" id="stripeEmail" name="stripeEmail" />
<button id="customButton">Purchase</button>
</form>

<script type="text/javascript">
var handler = StripeCheckout.configure({
key: 'pk_test_YgHVTCLIMQLW4NV6ntnJPAXs',
image: 'https://stripe.com/img/documentation/checkout/marketplace.png',
locale: 'auto',
token: function (token) {

$("#stripeToken").val(token.id);
$("#stripeEmail").val(token.email);
$("#myForm").submit();
                    }
                });

$('#customButton12').on('click', function (e) {
      handler.open({
      name: 'Yearly',
      description: 'Yearly Charge',                            
      amount: 9500
                    });
                    e.preventDefault();
                });
          $(window).on('popstate', function () {
                    handler.close();
                });

                </script>

以下是视图:

@app.route('/yearly', methods=['GET', 'POST'])
def yearly_charge():


    key = stripe_keys['publishable_key']
    data = get_profile_data(session['auth_token'])       
    profile_data = data['Student']
    student_id = profile_data.id
    student = get_profile_data(session['auth_token'])['StudentProfile']    
    pkg = Package.query.filter_by(student_id=profile_data.id).first()
    # customer
    stripe_token = request.form['stripeToken']
    email = request.form['stripeEmail']
    if not pkg:

        try:
            customer = stripe.Customer.create(
                email=email,
                source=request.form['stripeToken']

            )
            print request.form
            subscription = stripe.Subscription.create(
                customer=customer.id,
                plan="yearly",
            )
            student_id = profile_data.id
            student.stripe_customer_id = customer.id
            student.stripe_subscription_id = subscription.id
            package = Package(
                student_id=student_id,
                stripe_id = customer.id,
                student_email=request.form['stripeEmail'],
                is_active=True,
                package_type='yearly',
                subscription_id=subscription.id
            )
            dbase.session.add(package)

            dbase.session.commit()

        except stripe.error.CardError as e:
            # The card has been declined
            body = e.json_body
            err = body['error']
        flash("You've successfylly subscribed for annual package.")

    return redirect(url_for('new_template', key=key))

错误:

stripe.error.InvalidRequestError
InvalidRequestError: Request req_AMbjoYEtQR1d6Y: Invalid source object: must be a dictionary or a non-empty string. See API docs at https://stripe.com/docs'

【问题讨论】:

  • 您是否将密钥分配给任何地方的条带实例?像 stripe.api_key =key
  • 我不明白你的意思。 Stripe 令牌首先是从键关联派生的。我可以使用此链接使用简单的按钮订阅甚至取消订阅。 stripe.com/docs/checkout/flask。当我尝试自定义按钮时,事情变得一团糟。

标签: javascript jquery python flask


【解决方案1】:

您似乎正在尝试为条纹实现自定义按钮。如果您不知道如何在 python 和 js 之间进行通信,有一种简单的方法可以代替编写所有代码。

<form action='/yoururl' method='post'>
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
               data-key="{{ key }}"
               data-description="Your Description"
               data-amount="500"
               data-locale="auto"></script>
               <input type="submit" value='Subscribe' class='btn' style='height:33px;width:50%;color:white;'>
               </form>
               <script>
document.getElementsByClassName("stripe-button-el")[0].style.display = 'none';
               </script>

代码中实际发生的事情是它隐藏了默认的条纹按钮。因此,任何输入按钮都将在标签内为您工作。您可以使用多个按钮,例如,如果您有另一个按钮,您可以使用不同的价格或其他变量,只需更改脚本如下:

 <script>
document.getElementsByClassName("stripe-button-el")[1].style.display = 'none';
               </script>     

如果有第三个按钮,你可以这样做:

        <script>
document.getElementsByClassName("stripe-button-el")[2].style.display = 'none';
               </script>

【讨论】:

  • 但是条带 checkout.js 脚本如何知道哪个按钮以什么形式反映?
  • 这是一个错误的问题。计算机从上到下和从左到右读取数据。首先尝试一下,让我知道结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 2020-05-20
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多