服务热线 400-660-8066

石家庄网站建设
首页 站内资讯

石家庄网站建设

站内资讯
石家庄网站建设 / 站内资讯 / 行业资讯 / 正文

外贸独立站之国外支付接口Paypal对接

来源: All文章
发布时间:2023-03-31 17:02:47

  1.首先去开发者平台注册测试账号,注册网站是

  2.好了之后再进入Sandbox建立测试用的Paypal虚拟帐号(至少应该建立一个Business的和一个Personal的),这个虚拟帐号可以建一个商家号和一个支付号,可用于测试,里面的金额可以自由设定。

  3.商家号那里一般填写的是邮箱(测试的时候,正式的商家号不是邮箱)。

  4.需要注意的是:

  5.

  1、把相关配置信息尽量放到数据库中。

  6.

  2、测试帐号下的支付完成后是不会触发异步回调地址的,需要到开发者平台的去模拟相关触发。

  7.

  3、为了回调支付准确,增加了一个可以自定义的验证密钥,参与加密验证。

  8.基本配置信息:

  function__construct(){

  parent::__construct();

  $testConfig=array(

  'payUrl'='https://www.300.cn/cgi-bin/webscr',//支付地址

  'business'='3HSV6******',//商家号

  'currency_code'='USD',//支付币种具体代码可参考:https://developer.paypal.com/docs/classic/api/currency_codes/

  'lc'='US',//支付页面的语言具体代码可参考:https://developer.paypal.com/docs/classic/api/country_codes/

  'key'='siteape',//个人加密字符串

  );

  $prodConfig=array(

  'payUrl'='https://www.300.cn/cgi-bin/webscr',//支付地址

  'business'='3HSV6******',//商家号

  'currency_code'='USD',//支付币种具体代码可参考:https://developer.paypal.com/docs/classic/api/currency_codes/

  'lc'='US',//支付页面的语言具体代码可参考:https://developer.paypal.com/docs/classic/api/country_codes/

  'key'='siteape',//个人加密字符串

  );

  $payConfig=$testConfig;//这里切换测试环境和生产环境

  $this-payConfig=$payConfig;

  }

  9.paypal支付提交处理

  publicfunctionpaypalpay(){

  $oid=I('oid');

  //数据信息

  $order=M('order')-find($oid);//订单信息

  if(!$order){

  $this-display('Public:404');

  exit();

  }

  $data=$this-payConfig;

  //订单详情信息

  $orderDetail=M('order_detail')-where(array('oid'=$oid))-select();

  $goodsInfo='';

  foreach($orderDetailas$k=$v){

  $product=M($v['name'])-field('title')-find($v['pid']);

  $product_color=M($v['name'].'_colors')-field('title')-find($v['color_id']);

  $goodsInfo.=$product['title'].'-'.$product_color['title'].'-'.$v['diameter'].'-'.$v['number'].'-';

  }

  //加密传值

  $signSrc='';

  $signArr=array(

  'invoice'=$order['order_num'],//自定义订单号

  'key'=$data['key'],//自定义的加密字符串

  );

  foreach($signArras$k=$v){

  $signSrc.=$v;

  }

  $signInfo=strtoupper(hash(sha256,$signSrc));

  //表单提交

  $formData=array(

  'cmd'='_xclick',

  'business'=$data['business'],

  'item_name'=string_replace($goodsInfo),

  'currency_code'=$data['currency_code'],

  'amount'=$order['real_money'],

  'notify_url'=C('PROTOCOL').$_SERVER['SERVER_NAME'].U('Pay/paypalnotifyurl'),

  'return'=C('PROTOCOL').$_SERVER['SERVER_NAME'].U('Order/info',array('order_num'=$order['order_num'],'paypal'=1)),//支付成功后网页跳转地址把order_num带上

  'cancel_return'=C('PROTOCOL').$_SERVER['SERVER_NAME'].U('Order/info',array('order_num'=$order['order_num'])),//用户取消支付后跳转的地址

  'invoice'=$order['order_num'],//自定义订单号

  'no_shipping'=1,

  'custom'=$signInfo,//自定义变量原样返回订单id号

  'charset'='utf8',

  'lc'=$data['lc'],

  );

  header(Content-type:text/html;charset=utf-8);

  //输出提交表单

  $payForm='formaction='.$data['payUrl'].'method=postid=formname=form'.inputs($formData).'/formscriptdocument.form.submit()/script';

  echo$payForm;

  }

  10.paypal回调地址

  publicfunctionpaypalnotifyurl(){

  $data=$this-payConfig;

  //加密接收值

  $getData=array(

  'invoice'=I('post.invoice'),

  'key'=$data['key'],

  );

  //键名和键值和上面的原加密字符串一致

  $payment_status=I('post.payment_status');

  $custom=I('post.custom');//接收的加密字符串

  $signSrc='';

  foreach($getDataas$k=$v){

  $signSrc.=$v;

  }

  $signInfo=strtoupper(hash(sha256,$signSrc));

  //验证与修改

  if($signInfo==$custom$payment_status=='Completed'){

  //改变订单的状态为已支付

  $saveData=array(

  'pay_create_time'=time(),

  'pay_sign_info'=$signInfo,

  'status'=2,

  );

  $re=M('order')-where(array('order_num'=$getData['invoice']))-data($saveData)-save();

  $payResult=Congratulations,paymentissuccessful!;

  }else{

  $payResult=Datavalidationfailed;

  }

  /*支付的异步记录备查*/

  $logData=I('post.');

  $logfile=.'/payPalLog_c451f8e6e5301

  4.txt';

  import(Org.Util.File);

  $logObj=new\File($logfile);

  $logfile=$logObj-getRealFile();

  file_put_contents($logfile,serialize($logData),FILE_APPEND);

  }

  }

  11.组装表单域

  functioninputs($data){

  $inputs='';

  foreach($dataas$k=$v){

  $inputs.='inputtype=hiddenname='.$k.'value='.$v.'/';

  }

  return$inputs;

  }

* 文章来源于网络,如有侵权,请联系客服删除处理。
在线 咨询

添加动力小姐姐微信

微信 咨询

电话咨询

400-660-8066

我们联系您

电话 咨询
微信扫码关注动力小姐姐 X
qr