呕心之作:支付宝的手机网站支付接口的应用

news/2024/5/17 12:04:21/文章来源:https://blog.csdn.net/weixin_30367543/article/details/97607477

  由于去年做手机Portl接口的工作,需要使用支付宝的支付,于是手机网站支付接口就成了首选。

1.首先下载接口包

 支付宝商家服务中心链接https://b.alipay.com/login.htm?goto=https://b.alipay.com:443/newIndex.htm

  手机网站支付的产品介绍:https://b.alipay.com/order/productDetail.htm?productId=2013080604609688

  demo下载链接:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104511&docType=1   (请点击关键字demo,进行下载)

  

  解压下载的文件可以看到文件夹的结构如下图:

  

  我使用的是RSA签名方式,PHP-UTF-8的文件夹

2.readme.txt的文档说明

  红色字体的文件是最重要的文件,也是必需的!


├lib┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈类文件夹
│ │
│ ├alipay_core.function.php ┈┈┈┈┈┈支付宝接口公用函数文件
│ │
│ ├alipay_notify.class.php┈┈┈┈┈┈┈支付宝通知处理类文件
│ │
│ ├alipay_submit.class.php┈┈┈┈┈┈┈支付宝各接口请求提交类文件
│ │
│ └alipay_rsa.function.php┈┈┈┈┈┈┈支付宝接口RSA函数文件

├log.txt┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈日志文件

alipay.config.php┈┈┈┈┈┈┈┈┈┈┈┈基础配置类文件

alipayapi.php┈┈┈┈┈┈┈┈┈┈┈┈┈┈支付宝接口入口文件

notify_url.php ┈┈┈┈┈┈┈┈┈┈┈┈┈服务器异步通知页面文件

return_url.php ┈┈┈┈┈┈┈┈┈┈┈┈┈页面跳转同步通知文件

├key┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈私钥公钥文件夹(用法见下方※注意※)
│ │
│ ├rsa_private_key.pem┈┈┈┈┈┈┈┈┈商户的私钥文件
│ │
│ └alipay_public_key.pem┈┈┈┈┈┈┈┈支付宝的公钥文件

├openssl┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈缺省dll文件(用法见下方※注意※)
│ │
│ ├libeay32.dll
│ │
│ ├ssleay32.dll
│ │
│ └php_openssl.dll

cacert.pem ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈用于CURL中校验SSL的CA证书文件

readme.txt ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈使用说明文本


3. 把必需的文件整合到框架里(我当时用的是thinkPHP框架)
  (1)在 里新建一个文件夹叫AliMobilePay

      
     把上图里的4个文件拷贝到AliMobilePay文件夹里,

      对以上文件进行重命名,

      alipay_core.function.php重命名为:Corefunction.php

      alipay_notify.class.php重命名为:Notify.php

      alipay_rsa.function.php重命名为:Rsafunction.php

      alipay_submit.class.php重命名为:Submit.php

      打开Notify.php,去掉一下代码,

      require_once("alipay_core.function.php");
      require_once("alipay_rsa.function.php");

      同样的道理去掉其他3个文件里的包含文件。

  (2)在根目录下建立一个文件夹key
     在key文件夹里放入
商户的私钥文件、支付宝的公钥文件、CA证书文件

        

       如何生成RSA密钥:https://cshall.alipay.com/enterprise/help_detail.htm?help_id=474010&keyword=%C8%E7%BA%CE%C9%FA%B3%C9%B9%AB%CB%BD%D4%BF&sToken=s-5d0c889ac47741fd8094b26d4862696b&from=search&flag=0   (此文中描述的rsa_private_key.pem就是商家的私钥文件

         

      ◆商户的私钥
      1、不需要对刚生成的(原始的)私钥做pkcs8编码
      2、不需要去掉去掉“-----BEGIN RSA PRIVATE KEY-----”、“-----END RSA PRIVATE KEY-----”
      简言之,只要维持用openssl工具刚生成出来的私钥的内容即可

      

      ◆支付宝公钥
      1、须保留“-----BEGIN PUBLIC KEY-----”、“-----END PUBLIC KEY-----”这两条文字。
      简言之,支付宝公钥只需要维持demo里的原样即可

      

   (3)alipay_config.php 配置文件

      把alipay_config.php 配置文件整合到thinkPHP框架的配置文件里

      

<?php
/*** Created by PhpStorm.* User: zhangxiaoliu* Date: 16/4/15* Time: 上午10:39*/
//支付宝商家服务中心链接:https://b.alipay.com/login.htm?goto=https://b.alipay.com:443/newIndex.htm
return array('ALIMOBILEPAY_CONFIG'=>array(//合作身份者id,以2088开头的16位纯数字, (合作身份者id的查看链接:https://b.alipay.com/order/pidAndKey.htm)'partner' => '2088XXXXXXXXXXXX',//收款支付宝账号,与partner的值一样'seller_id' => '2088XXXXXXXXXXXX',//商户的私钥(后缀是.pem)文件相对路径'private_key_path'=> NEW_PORTAL_DOMAIN.'key/rsa_private_key.pem',//支付宝公钥(后缀是.pem)文件相对路径'ali_public_key_path'=> NEW_PORTAL_DOMAIN.'key/alipay_public_key.pem',//签名方式 不需修改'sign_type' => strtoupper('RSA'),//字符编码格式 目前支持 gbk 或 utf-8'input_charset'=> 'utf-8',//ca证书路径地址,用于curl中ssl校验'cacert' => NEW_PORTAL_DOMAIN.'key/cacert.pem',//访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http'transport' => 'http',//这里是异步通知页面url,提交到项目的Payment控制器的notifyurl方法;//需http://格式的完整路径,不能加?id=123这类自定义参数'notify_url'=> NEW_PORTAL_DOMAIN.'portal.php/AliMobilePay/notify_url.php',//这里是页面跳转通知url,提交到项目的Payment控制器的returnurl方法;//需http://格式的完整路径,不能加?id=123这类自定义参数'return_url'=> NEW_PORTAL_DOMAIN.'portal.php/AliMobilePay/return_url.php',//支付成功跳转到的页面'successpage'=>NEW_PORTAL_DOMAIN.'portal.php/Success/index',//支付失败跳转到的页面'errorpage'=>NEW_PORTAL_DOMAIN.'portal.php/Error/index',//商品展示地址'product_url'=>NEW_PORTAL_DOMAIN.'portal.php/Product/index',)
);

 

    (4)支付宝帮助中心

      https://cshall.alipay.com/enterprise/index.htm

4.调用支付宝接口

    (1)新建一个AliMobilePay控制器

<?php
namespace Portal\Controller;
use Common\Component\FilterComponent;
use Portal\Service\LogPaycallbacksService;
use Portal\Service\GuozhanOrderService;
use Portal\Model\Pengwifi\Guozhan\OrderModel;
use Portal\Service\TokenService;
use Portal\Service\UserService;
use Portal\Service\SetMotoRadiusService;
use Common\Model\Radius\RadcheckModel;
/** 购买上网卡的手机页面支付宝接口*/
class AliMobilePayController extends CommonController{protected $_order_model=null;protected $_order_service=null;protected $_token_service = null;protected $_Set_MotoRadius_service=null;protected $_RadcheckModel=null;protected $_log_pay_callbacks = null;protected function afterInit() {parent::afterInit();vendor('AliMobilePay.Corefunction');vendor('AliMobilePay.Rsafunction');vendor('AliMobilePay.Notify');vendor('AliMobilePay.Submit');$this->_order_model= new OrderModel();$this->_order_service= new GuozhanOrderService();$this->_log_pay_callbacks = new LogPaycallbacksService();$this->_service = new UserService();$this->_token_service = new TokenService();$this->_RadcheckModel = new RadcheckModel();$this->_Set_MotoRadius_service = new SetMotoRadiusService();}/*** 执行新增订单*/protected function _post(){if(isset($this->params['name']) && ($this->params['name']=="notify_url")){$this->notify_url('notify_url');die;}$this->insert_order();}protected function _get(){/**根据配置文件里的路由规则:*':'.$var_controller.'/[:name]/[:action]'=>		':1/_index?',	//匹配控制器后紧跟字符串,表示name* 例如:http://portal_v2.com/portal.php/Payment/Return.html* $notify_url会返回Return*/$notify_url = isset($this->params['name']) ? FilterComponent::getString($this->params['name']) : 'Unknown';switch($notify_url){case 'return_url':$this->return_url($notify_url);break;default:$this->_log_pay_callbacks->update(array('request_from'=>'Unknown'), false);exit('Wrong request url');}}//服务器异步通知页面方法private function notify_url($notify_url){$alipay_config = C('ALIMOBILEPAY_CONFIG');//计算得出通知验证结果$alipayNotify = new \AlipayNotify($alipay_config);$verify_result = $alipayNotify->verifyNotify();if($verify_result) {//验证成功//商户订单号$order_sn = $this->params['out_trade_no'];//支付宝交易号//$trade_no = $this->params['trade_no'];//交易状态$trade_status = $this->params['trade_status'];$this->_log_pay_callbacks->update(array('request_from'=>$notify_url, 'order_sn'=>$order_sn, 'response_status'=>$trade_status), false);if (in_array($trade_status,array('TRADE_SUCCESS','TRADE_FINISHED'))) {//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//如果有做过处理,不执行商户的业务程序if(!$this->checkorderstatus($order_sn)){$result=$this->orderhandle($order_sn);if($result==true){echo "success";}else{echo "fail";}}}else{echo "fail";}}else {//验证失败echo "fail";}}//页面跳转同步通知private function return_url($notify_url){$alipay_config=C('ALIMOBILEPAY_CONFIG');//计算得出通知验证结果$alipayNotify = new \AlipayNotify($alipay_config);$verify_result = $alipayNotify->verifyReturn();if($verify_result) {//验证成功//商户订单号$order_sn = $this->params['out_trade_no'];//支付宝交易号//$trade_no = $this->params['trade_no'];//交易状态$trade_status = $this->params['trade_status'];$this->_log_pay_callbacks->update(array('request_from'=>$notify_url, 'order_sn'=>$order_sn, 'response_status'=>$trade_status), false);if (in_array($trade_status,array('TRADE_SUCCESS','TRADE_FINISHED'))) {//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//如果有做过处理,不执行商户的业务程序if(!$this->checkorderstatus($order_sn)){$result=$this->orderhandle($order_sn);//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——if($result==true){header("Location:".C('ALIMOBILEPAY_CONFIG.successpage'));//跳转到配置项中配置的支付成功页面;}else{header("Location:".C('ALIMOBILEPAY_CONFIG.errorpage'));//跳转到配置项中配置的支付失败页面;}}}else {header("Location:".C('ALIMOBILEPAY_CONFIG.errorpage'));//跳转到配置项中配置的支付失败页面;}}else {//支付宝页面“返回商户”按钮的链接,商品页面header("Location:".C('ALIMOBILEPAY_CONFIG.product_url'));}}//在线交易订单支付处理函数//函数功能:根据支付接口传回的数据判断该订单是否已经支付成功;//返回值:如果订单已经成功支付,返回true,否则返回false;private function checkorderstatus($order_sn){$status=$this->_order_model->where("order_sn='$order_sn'")->getField('order_status');if($status == OrderModel::ORDER_STATUS_PAYED){return true;}else{return false;}}//处理订单函数//更新订单状态,写入订单支付后返回的数据private function orderhandle($order_sn){try{//开启事务$this->_order_model->startTrans();$data['order_status']=OrderModel::ORDER_STATUS_PAYED;$affected_row=$this->_order_model->where("order_sn='$order_sn'")->save($data);$find=$this->_order_model->where("order_sn='$order_sn'")->field('location_id,goods_id,mobile,goods_number')->find();//根据goods_id查找card_name对应的上网时长$goods_model=M('goods');$card_model=M('card');$card_name=$goods_model->where("id={$find['goods_id']}")->getField('card_name');$duration=$card_model->where("location_id={$find['location_id']} and card_name='$card_name'")->order('id desc')->getField('duration');$incre_time=($find['goods_number']) * $duration;$user_model=M('user');$mobile=$find['mobile'];$user_info=$user_model->where("user_name='{$mobile}'")->field('id,end_time')->find();$affected_row2=$user_model->where("user_name='{$mobile}'")->setInc('usable_time',$incre_time);//如果end_time 大于当前的时间戳就累计,否则就更新:使用当前时间戳 加上 $incre_timeif($user_info['end_time'] >= time()){$user_model->where("user_name='{$mobile}'")->setInc('end_time',$incre_time);}else{$update_data['end_time']=time()+$incre_time;$user_model->where("user_name='{$mobile}'")->save($update_data);}if(empty($affected_row)){$this->_log_pay_callbacks->setException(L('ERROR_FAILED_UPDATE_ORDER'), $this->_log_pay_callbacks->getException('code'));throw new \Exception();}if(empty($affected_row2)){$this->_log_pay_callbacks->setException(L('ERROR_FAILED_UPDATE_USABLETIME'), $this->_log_pay_callbacks->getException('code'));throw new \Exception();}//提交更新if($affected_row && $affected_row2) {$this->_order_model->commit();return true;}}catch(\Exception $e){$this->_order_model->rollback();return false;}}private function insert_order(){$gw_id = isset($this->params['gw_id']) ? FilterComponent::get($this->params['gw_id']) : '';if (empty($gw_id)) {exit('400_EMPTY_GWID');}$router=M('router');$location_id=$router->where("gw_id='$gw_id'")->getField('supplier_location_id');$goods_number = isset($this->params['goods_number']) ? FilterComponent::get($this->params['goods_number'],'int') : '';if (empty($goods_number)) {exit('400_EMPTY_GOODSNUMBER');}$mobile = isset($this->params['mobile']) ? FilterComponent::get($this->params['mobile']) : '';if (!preg_match('/^1[0-9]{10}$/',$mobile)) {exit('400_ERROR_MOBILE');}$user=M('user');//查询充值号码是否存在$user_name=$user->where("user_name='$mobile'")->getField('user_name');if(!$user_name){exit('400_EMPTY_USERNAME');}$goods_id = isset($this->params['goods_id']) ? FilterComponent::get($this->params['goods_id'],'int') : '';if (empty($goods_id)) {exit('400_EMPTY_GOODSID');}$goods=M('goods');$unit_price=$goods->where("id=$goods_id")->getField('unit_price');$this->params['WIDtotal_fee']=$unit_price * $goods_number;$data['location_id']=$location_id;$data['mobile']=$mobile;$data['goods_id']=$goods_id;$data['goods_type']=1;//1代表充值卡$data['goods_number']=$goods_number;$data['total_price']=$this->params['WIDtotal_fee'];$data['pay_type']=OrderModel::PAY_TYPE_ALIPAY;//支付宝//执行添加操作$insert_id=$this->_order_service->update($data,false);
//        var_dump($this->_order_service->getError());
//        var_dump($this->_order_service->model->getError());
//        var_dump($this->_order_service->model->getlastsql());die;if($insert_id){$this->params['WIDout_trade_no']=$this->_order_model->where("id=$insert_id")->getField('order_sn');/**************************请求参数**************************///支付类型$payment_type = "1";//必填,不能修改//商户订单号$out_trade_no = $this->params['WIDout_trade_no'];//商户网站订单系统中唯一订单号,必填$this->params['WIDsubject']='pengwifi_card';//订单名称$subject = $this->params['WIDsubject'];//必填//付款金额$total_fee = $this->params['WIDtotal_fee'];//必填//$this->params['WIDshow_url']=trim(C('ALIMOBILEPAY_CONFIG.product_url'));$this->params['WIDshow_url']=$_SERVER['HTTP_REFERER'];//商品展示地址$show_url = $this->params['WIDshow_url'];//必填,需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html//订单描述$body = $this->params['WIDbody'];//选填//超时时间$it_b_pay = $this->params['WIDit_b_pay'];//选填//钱包token$extern_token = $this->params['WIDextern_token'];//选填/************************************************************///构造要请求的参数数组,无需改动$parameter = array("service" => "alipay.wap.create.direct.pay.by.user","partner" => trim(C('ALIMOBILEPAY_CONFIG.partner')),"seller_id" => trim(C('ALIMOBILEPAY_CONFIG.seller_id')),"payment_type"	=> $payment_type,"notify_url"	=> trim(C('ALIMOBILEPAY_CONFIG.notify_url')),"return_url"	=> trim(C('ALIMOBILEPAY_CONFIG.return_url')),"out_trade_no"	=> $out_trade_no,"subject"	=> $subject,"total_fee"	=> $total_fee,"show_url"	=> $show_url,"body"	=> $body,"it_b_pay"	=> $it_b_pay,"extern_token"	=> $extern_token,"_input_charset"	=> trim(strtolower(C('input_charset'))));$alipay_config=C('ALIMOBILEPAY_CONFIG');//建立请求$alipaySubmit = new \AlipaySubmit($alipay_config);//建立请求,以表单HTML形式构造(默认),经测试post方法不行$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");echo $html_text;}else{echo 'fail';}}
}

如果您阅读过此文章有所收获,请为我顶一个,如果文章中有错误的地方,欢迎指出。

相互学习,共同进步!

 

转载于:https://www.cnblogs.com/zhangxiaoliu/p/5392301.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_774776.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么cms大部分用php写,为什么使用phpcms建站

来谈谈为什么使用phpcms建站&#xff0c;现在是2021年&#xff0c;我仍然觉得很有必要做一下这个说明&#xff0c;一款老的建站cms系统&#xff0c;是否有必要仍然使用。首先&#xff0c;我们都知道&#xff0c;国内3大主流cms是帝国cms&#xff0c;织梦&#xff0c;还有就是ph…

wuc-tab标签点击不了_怎么提高网站点击率(已帮助2548人)

内容导读同样的流量&#xff0c;同样的更新&#xff0c;同样的外链&#xff0c;为什么有的网站点击率很高&#xff0c;有的网站点击率很低&#xff0c;点击率高的网站都有哪些特点&#xff0c;点击率高的网站文章质量一定就高吗&#xff0c;点击率低的网站文章质量一定就低吗&a…

centos7建站php_小白零基础建站详细教程

作为一个新手&#xff0c;想拥有一个自己独立网站、博客该如何操作&#xff0c;搭建网站呢&#xff1f;其实也很简单看完这篇文章你也就懂了&#xff01;1.申请服务器具体过程我就不做重点描述了&#xff0c;大概步骤就是1.选择服务器厂商&#xff1b;2.选择服务器配置&#xf…

如何给页面加上loding_网站页面布局该如何优化?

网站的页面布局&#xff0c;是SEO优化工作中重要的板块之一&#xff0c;这当中包含了很多方面的细节问题。下面&#xff0c;柒点传媒就来教大家如何优化网站页面布局。图片源自网络1.图片还是文本一篇优质的文章往往会图文兼备&#xff0c;所以优化图片是一项不可或缺的工作。在…

网站能正常登陆但是点进去出现404错误_一群设计师用“404错误页面”逼死人啦...

- 小科普 -什么是404页面&#xff1f;404页面是客户端在浏览网页时&#xff0c;服务器无法正常提供信息&#xff0c;或是服务器无法回应&#xff0c;且不知道原因所返回的页面。说起“404错误”你眼前的画面是&#xff1f;随着这个白底黑字的页面出现&#xff0c;你不由自主地轻…

html的形式链接网站怎么样,网站内链的表现形式有哪些?

内部链接的首要目的就是提高网站的整体收录&#xff0c;提升链接目的页面的排名&#xff0c;对网站整体的流量能起到显著的优化。那网站内链的表现形式有哪些?1.网站导航网站导航是最常见的内部链接&#xff0c;也是比较重要的内链环节&#xff0c;用户或搜索引擎蜘蛛&#xf…

本地有一个现成的php网站但是数据库的账号密码啥的都和空间的不一样,本地web项目部署到服务器里连接不上数据库的解决办法...

今天突然想到把自己之前的项目挂到服务器上&#xff0c;但是用到了数据库&#xff0c;于是给服务器装上了MySQL&#xff0c;想着能赶紧把项目挂上去看看效果&#xff0c;然后并不是一帆风顺&#xff0c;在奋斗了四小时后终于解决了问题的所在。(1)首先我找到了自己的期中考试题…

[导入]新建了一个站点,关于网站色彩搭配的,请多关照

目前正在内部测试中&#xff0c;请大家支持和鼓励哈。浏览地址 : http://www.colorstreet.cn 谢谢。Gary Gong 2007-08-22 15:14 发表评论文章来源:http://www.cnblogs.com/edidu/archive/2007/08/22/865457.html转载于:https://www.cnblogs.com/wallis0922/articles/872248.…

恒联网络技术服务中心网站设计

恒联网络技术服务中心网站设计也就是我目前所在工作的公司&#xff0c;进行改版 转载于:https://www.cnblogs.com/javashi/archive/2010/01/21/1653646.html

51CTO专访人人网黄晶:SNS网站后台架构探秘

【51CTO独家专访】51CTO在此之前报道过一篇名为《世界最大的PHP站点 Facebook后台技术探秘》的文章&#xff0c;让我们了解到Facebook是如何保证5亿用户的系统一直保持稳定、可靠运行的。如果说Facebook离我们有些远的话&#xff0c;那么相信人人网是大家再熟悉不过的一个SNS网…

如何添加网站产品类别+网站产品的添加

1&#xff1a;登陆后台 点击产品管理 会列出当前所有的产品的类别&#xff0c; 我们添加一个新的产品类别 点击 添加列表 点击保存。 2&#xff1a;选中一个产品类别&#xff0c;添加此类别下的产品 点击保存后 返回列表即可看到刚才添加的产品。如果想在网站前台看到这个产…

2011年20大3D网站

如果要在互联网编年史上描述2011年的话&#xff0c;那么无需任何插件即可在浏览器中直接嵌入支持硬件加速的3D图形一定会被记上重重的一笔。 随着大部分现代浏览器都增加了对WebGL的支持&#xff08;微软IE除外&#xff09;&#xff0c;以及最近发布的Flash 11&#xff0c;开发…

16个销售单个商品的电子商务网站设计示例

这似乎有点奇怪&#xff0c;设计单品电子商务网站有什么特别的吗&#xff1f;不过&#xff0c;例如像 Kickstarter&#xff0c;制造商机芯&#xff0c;3D打印等等&#xff0c;这些使得任何人都可以更容易创建一个新的产品的新东西&#xff0c;你就会明白为什么有单品电子商务的…

在电脑上部署网站lls 浏览器上访问

​在win7 上安装&#xff0c;首先是要进入lls中进行设置&#xff0c;这是第一种方法&#xff1a; 通过图形化的操作方式进行设置&#xff0c; 这个界面中的东西都比较重要&#xff0c;电脑出现问题的话一般在这都可以进行调整&#xff0c;程序和功能可以用来管理你安装的软件&a…

js status不能显示_uptime-status - 一个基于UptimeRobot的网站在线监控面板

简介uptime-status 是一个基于UptimeRobot的网站在线监控程序&#xff0c;可以监控自己网站的在线状态&#xff0c;在静态页面上直观的显示出来&#xff01;无需搭建运行环境&#xff0c;下载并配置完成后直接运行。目前已经在 GitHub 上放出编译好的文件&#xff0c;什么环境都…

行业网站设计策划书_网站建设及推广的注意事项

更多精彩内容请关注我们如果你是一个相对成熟的企业&#xff0c;我们在建立网站的时候&#xff0c;总是会让网站开发人员&#xff0c;撰写一个网站策划书&#xff0c;通常而言&#xff0c;我们在做网站策划的时候&#xff0c;一份网站策划书主要包括如下一个因素&#xff1a;①…

apple java验证 支付_【支付宝支付】支付宝手机网站支付流程

前言微信APP支付&#xff0c;微信授权&#xff0c;微信JSAPI支付&#xff0c;微信退款&#xff0c;支付宝APP支付&#xff0c;支付宝手机网站支付&#xff0c;支付宝退款。笔者都放到公众号: JAVA大贼船。微信搜一搜&#xff0c;方便以后开发用哦&#xff01;官方文档支付宝手机…

传统高并发网站入门级架构思想

不涉及具体技术&#xff0c;都是烂大街的东西&#xff0c;只是简单总结一下。 1 前端域名分流 不同的内容从不同的域名的服务器获取。值得注意的是&#xff0c;cookie不能跨域名访问。 主域名下会产生一些cookie&#xff0c;通过不同的静态文件&#xff0c;比如图片&#xff0c…

小皮php面板mysql配置_体验phpStudy小皮面板创建LAMP/LNMP系统和建站图文

在国庆节后老 左有看到原phpStudy面板新的Linux面板系统更新发布取名小皮面板(phpStudy Linux系统初次体验 - 一键安装phpStudy面板查看功能)&#xff0c;初次体验这款面板之后我们肯定会会当前比较热门的宝塔面板作为比较&#xff0c;有些人说UI和功能上有所参考&#xff0c;但…

公共链接url出错_SEO优化时,网站URL应该如何设计?

URL是搜索结果列表中显示的内容之一。在设计网站结构时&#xff0c;我们需要预先规划目录和文件命名系统。规划的主要原则是从用户体验出发&#xff0c;URL要清晰友好&#xff0c;这样方便记住。此外&#xff0c;还要考虑到URL对排名的影响&#xff0c;具体考虑以下几个方面。图…