paypal简单分享

经过一段时间跟paypal的死磕,现在算是能够实现最简单的支付流程,这期间很感谢paypal的客服跟技术支持,尤其是技术支持,很热情的帮我检查问题,我就想通过这个让跟我遇到相同问题的朋友们能够尽快绕过去,别在这里因为一些简单的问题浪费时间!

    主要卡在登录支付的时候一直登录不成功,setbuyer 500错;
    
    一、首先是账号的注册,在官网www.paypal.com注册一个自己的卖家账号。申请成功之后,他会给你两个测试账号,一个卖家账号,一个买家账号,但是这个地方很坑,因为经过什么国家外汇监管规定,导致两个咱们国家的账号之间不能交易,这个也是paypal的工作人员告诉我的;


    


      所以根据上面的要求我们就需要两个不同的国籍的账号,所以自己重新创建两个测试号;
      **在创建两个测试号的时候,需要注意的是当其中一个账号是中国的时候在credit cards的时候最好选择none别选visa其他的我没试过**
      之所以这样,是因为visa是国际信用卡(别人跟我解释的我也不懂)

    

 

账号创建完成之后,需要去给卖家账号做一些配置,首先是设置 回调 “即时付款通知”,

它就是一个方法,当支付状态发生变化的时候,paypal就会回调这个方法,也就是说它里面你可以写自己支付的一些逻辑,我的就是当发现成功的时候修改订单状态而已;

 

二、账号创建的问题解决了,接下来就是简单的表单demo

<form id="form_starPay" name="form_starPay" action="https://www.paypal.com/cgi-bin/webscr" method="post"> //测试www.sandbox.paypal.com,正式www.paypal.com

<input type="hidden" name="cmd" value="_xclick">
 
<input type="hidden" name="business" value="suomalihailiang@boomshakalaka.com"> //卖家邮箱 

<input type="hidden" name="item_name" value="name"> //商品名称

<input type="hidden" name="amount" value="1"> //商品价格

<input type="hidden" name="currency_code" value="USD"> //交易货币

<input type="hidden" name="return" value=""> //支付成功后返回到什么地方

<input type="hidden" name="notify_url" value="">  //IPN回调地址
   
<input style="" type="submit" src=" https://www.paypal.com/en_US/i/btn/btn_buynow_LG.gif " border="0" name="submit" alt=" PayPal - The safer, easier way to pay online">

</form>

当点击按钮之后
      

当支付成功的时候,就会需要到那个IPN的回调地址接下来是一些我的回调代码;

    /**
     * paypal的回调处理
     */
    public function notify() {
        $order_model = new \app\index\model\Order();
        $param = $_POST;

        //获取订单号
        $order_number = $param['invoice'];
        $where['order_number'] = $order_number;
        //通过order_number找到相对应的订单,在线面判断的时候如果该信息为空就请求失败



        $order_info = $order_model->getOrderInfoByWhere($where);
        // 拼凑 post 请求数据

        $req = 'cmd=_notify-validate'; // 验证请求
        foreach ($param as $k => $v) {
            $v = urlencode(stripslashes($v));
            $req .= "&{$k}={$v}";
        }

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, PAYPAL_PAY_URL);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
        $res = curl_exec($ch);
        curl_close($ch);


        if ($res && !empty($order_info)) {
            if (strcmp($res, 'VERIFIED') == 0) {
                if ($param['payment_status'] == 'Reversed') {
                    //如果退款 就把付款状态给修改了
                    $update_data = array();
                    $update_data['status'] = 3;
                    $update_data['update_at'] = date('Y-m-d H:i', time());
                    $order_model->name('home_en_order')->where(array('order_id' => $order_info['order_id']))->update($update_data);
                } else if ($param['payment_status'] == 'Completed') {// 如果验证通过,则证明本次请求是合法的
                    //如果付款成功,就记录用户信息同时修改付款状态
                    $update_data = array();
                    $update_data['status'] = 2;
                    $update_data['user_email'] = $param['payer_email'];
                    $update_data['currency_type'] = $param['mc_currency'];
                    $update_data['user_name'] = $param['last_name'] . ' ' . $param['first_name'];
                    $update_data['update_at'] = date('Y-m-d H:i', time());
                    $order_model->name('home_en_order')->where(array('order_id' => $order_info['order_id']))->update($update_data);
                    exit('success');
                } else {
                    exit('fail');
                }
            } else {
                $order_model->name('home_en_order')->where(array('order_id' => 1))->update(array('user_name' => '修改失败'));
                exit('fail');
            }
        } else {
            $order_model->name('home_en_order')->where(array('order_id' => 1))->update(array('user_name' => '返回失败'));
            exit('fail');
        }
    }

需要注意的是,IPN验证的时候数据返回给paypal的时候必须要用https协议,不能是http,并且paypal支付最好使用的php版本在5.3以上;

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值