【问题标题】:How to make paypal button fields 'Required'?如何使贝宝按钮字段“必填”?
【发布时间】:2012-01-02 02:14:40
【问题描述】:

我使用 paypal 按钮生成器创建了一个立即付款按钮。

按钮有 2 个字段,然后你现在按付款。

但是,如果您将这些字段留空,您仍然可以付款

我想将这些字段设为“必填”,如果用户未填写这些字段,他应该无法付款。怎么样?

按钮未托管在贝宝上,但按钮保护开启。我希望对按钮进行加密。

编辑

我尝试了javascript表单验证,没有用,有什么帮助吗?

这是脚本

<form
action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<table>
<tr><td><input type="hidden" name="on0" value="first form">form 1</td></tr><tr><td><input type="text" name="os0" maxlength="200"></td></tr>
<tr><td><input type="hidden" name="on1" value="2nd form">2nd form</td></tr><tr><td><input type="text" name="os1" maxlength="200"></td></tr>
</table>
<input type="hidden" name="encrypted" value=" encryption here ">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_paynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

需要帮助填写这些字段吗?我会给你 3 票,因为我有 3 个 stackoverflow 帐户和一个可接受的答案 - 这是我能做的至少 :)

附言

我无法使表单验证工作,所以我试图隐藏提交按钮,除非表单已填写,到目前为止,这也不起作用。

更新 - @Last Rose Studios

我尝试了很多验证方式,最后我使用了我朋友的联系表单验证lol

validation.js

function has_id(id){try{var tmp=document.getElementById(id).value;}catch(e){return false;}
return true;}
function has_name(nm){try{var tmp=cfrm.nm.type;}catch(e){return false;}
return true;}
function $$(id){if(!has_id(id)&&!has_name(id)){alert("Field "+id+" does not exist!\n Form validation configuration error.");return false;}
if(has_id(id)){return document.getElementById(id).value;}else{return;}}
function $val(id){return document.getElementById(id);}
function trim(id){$val(id).value=$val(id).value.replace(/^\s+/,'').replace(/\s+$/,'');}
var required={field:[],add:function(name,type,mess){this.field[this.field.length]=[name,type,mess];},out:function(){return this.field;},clear:function(){this.field=[];}};var validate={check:function(cform){var error_message='Please fix the following errors:\n\n';var mess_part='';var to_focus='';var tmp=true;for(var i=0;i<required.field.length;i++){if(this.checkit(required.field[i][0],required.field[i][1],cform)){}else{error_message=error_message+required.field[i][2]+' must be supplied\n';if(has_id(required.field[i][0])&&to_focus.length===0){to_focus=required.field[i][0];}
tmp=false;}}
if(!tmp){alert(error_message);}
if(to_focus.length>0){document.getElementById(to_focus).focus();}
return tmp;},checkit:function(cvalue,ctype,cform){if(ctype=="NOT_EMPTY"){if(this.trim($$(cvalue)).length<1){return false;}else{return true;}}else if(ctype=="EMAIL"){exp=/^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;if($$(cvalue).match(exp)==null){return false;}else{return true;}}},trim:function(s){if(s.length>0){return s.replace(/^\s+/,'').replace(/\s+$/,'');}else{return s;}}};

paypal.html

<script src="validation.js"></script>


    <script>
    required.add('os0','NOT_EMPTY','1st form');

    required.add('os1','NOT_EMPTY','2nd form')

    </script>


<form action="https://www.paypal.com/cgi-bin/webscr" method="post" onsubmit="return validate.check(this)">
<input type="hidden" name="cmd" value="_s-xclick">
<table>
<tr><td><input type="hidden" name="on0" value="1st form">1st form<span class="required_star"> * </span></td></tr><tr><td><input type="text" name="os0" maxlength="200" id="os0" class="required"></td></tr>
<tr><td><input type="hidden" name="on1" value="2nd form">2nd form<span class="required_star"> * </span></td></tr><tr><td><input type="text" id="os1" name="os1" maxlength="200" class="required"></td></tr>
</table>
<input type="hidden" name="encrypted" value=" encryption here
">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_paynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

我用过 JavaScript,然后我读了你的答案,但我不会改变,因为它现在可以工作

我还有两个小问题

1- 是否可以从贝宝页面中删除描述框,请参阅this

2- 支付完成后,paypal 没有重定向到感谢页面,我创建了很多按钮,只是没有重定向(我没有取消页面)

【问题讨论】:

  • 我会尝试使用javascript的正常方法,但我认为它不会起作用
  • 我已经承诺给任何帮助我的人 3 票,现在还有赏金 :)
  • 请为您可能有的任何其他问题创建一个新问题,而不是将它们混合到这个问题中。

标签: paypal paypal-ipn paypal-sandbox paypal-subscriptions


【解决方案1】:

在不修改按钮代码的情况下,您需要一个客户端解决方案(就像您提到的那样),因为 POST 将直接发送到 PayPal (https://www.paypal.com/cgi-bin/webscr)。
或者,您可以将 POST 提交到服务器上的中间页面,然后从那里从 PayPal 转发,以便也包括服务器端检查(仅当这些字段是绝对必需的,例如禁用 JavaScript 时)。

【讨论】:

    【解决方案2】:

    您可以使用 html5 输入属性 'required',这样可以处理某些浏览器,而其他浏览器则必须使用 javascript 来验证表单。

    如果你不介意给你一个简单的例子,我会使用 jQuery。

    $('form').submit(function(e){
        flag = false;
        $('[name="os0"], [name="os1"]').css('background','').each(function(){
            el=$(this);
            if(el.val().length == 0){
               flag = true;
               el.css('background','red');
            }
        });
        if(flag){
         return false;
        }
    });
    

    这将阻止表单提交,除非两个字段都填写。我还通过将输入的背景变为红色(可选)为用户添加了一些反馈。

    当然,这仅适用于现代浏览器或启用了 javascript 的旧浏览器,但仍有一小部分会通过。在这种情况下,Robert 建议您发布到服务器上的中间页面可能是个好主意。

    【讨论】:

    • 还有一个小问题,你可以从贝宝页面上删除描述框吗?请参阅i.stack.imgur.com/ns9Lc.png
    • 付款后paypal按钮没有重定向到example/thankyou.php,为什么?谢谢
    猜你喜欢
    • 2013-04-11
    • 2016-05-18
    • 2013-02-06
    • 2015-11-01
    • 2017-01-12
    • 1970-01-01
    • 2020-03-17
    • 2014-08-27
    • 2014-08-30
    相关资源
    最近更新 更多