You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<VirtualHost *:80>
ServerAdmin www.smms.ink
ServerName www.smms.ink
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:1314/
ProxyPassReverse / http://127.0.0.1:1314/
</VirtualHost>
<virtualhost *:443>
ServerName www.smms.ink
<proxy>
Order deny,allow
Allow from all
</proxy>
SSLEngine On
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLCertificateFile cert/public.pem
SSLCertificateKeyFile cert/1523928142501.key
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:1314/
ProxyPassReverse / http://127.0.0.1:1314/
</virtualhost>
申请证书
要来回点击寻找一下,因为免费版隐藏了
配置
等待阿里云签发成功,然后在右边栏目里面选择下载
安装证书
文件说明:
( 1 ) 在Apache的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为1523928142501.key;
( 2 ) 打开 apache 安装目录下 conf 目录中的
httpd.conf
文件,找到以下内容并去掉“#”:( 3 ) 打开 apache 安装目录下
conf/extra/httpd-ssl.conf
文件 (也可能是conf.d/ssl.conf,与操作系统及安装方式有关), 在配置文件中查找以下配置语句:( 4 ) 重启 Apache。
( 5 ) 通过 https 方式访问您的站点,测试站点证书的安装配置,如遇到证书不信任问题
Apache反向代理设置https
因为我是用express框架写的后端,apache默认占了80端口,express可以通过反向代理来享用80端口
首先在 httpd.conf 启用必要的模块,也就是如果去掉下面这几行前面的
#
在 httpd.conf 末端添加如下设置,注意
ProxyPass
和ProxyPassReverse
设置为express框架暴露的端口,并且设置好SSLCertificateFile
和SSLCertificateKeyFile
的路径,路径就是上面安装证书步骤里面的路径此时当我们访问
https://www.xxx.com
就等于 访问到内网的http://127.0.0.1:1314
这样对
https://www.xxx.com
的访问,返回的数据将是来自http://127.0.0.1:1314
上面的这个配置思路总结为如下三步:
Apache和node共享端口
参考文档Apache和nodejs公用80端口的问题
思路是通过不同域名来区分进去是apache解析还是node解析文件,可以利用二级域名来划分
你可以根据自己的路由规则来实现不用的需求,例如:
此时我们可以根据不同的二级路由进入内网的不同端口,拨入我们可以把/nodejs分配给node开的1314端口,那么外网就可以通过https://xxx/nodejs/xxx进入到nodejs的服务器中,对应如果是其他路由就会进入到apache服务器中
企业支付宝接入
接入之前建议先看官方文档比较详细
创建应用
首先有企业支付宝账号,登录企业支付宝管理中心,登录不知道是不是安全校验太频繁,官网输入登录的时候特别卡特别慢,进入开发者中心,因为我选择的是网页&移动应用,要提供网址通过审核,审核通过就会出现下面的已上线应用
配置RSA密钥
下载官网中的RSA签名验签工具配置RSA2密钥,会生成应用公钥和应用密钥,注意上面选择中有JAVA适用和非JAVA适用的选项,因为我后端选择PHP所以我选择了非JAVA适用的PKCS1
把应用公钥上传应用信息中的开发配置中,还有开发配置中的应用网关不是必填项,可以选择不填,然后将旁边的支付宝密钥复制到后端的SDK中的config.php中alipay_public_key字段后,注意应用公钥是跟支付宝密钥完全不同的,不要弄错,不然一会儿验签会失败
配置服务器
下载对应的SDK文件手机网站支付DEMO,这里根据对应的需求进行下载,有对应不同后端语言的,我下载的手机网站支付是有包含完整前后端的逻辑的DEMO
一般来说最简单的测试只需要配置config.php文件就可以了
这里注意两点支付宝公钥和应用公钥,不要粘贴错,这里需要的是支付宝公钥而不是应用公钥,还有点就是notify_url和return_url
return_url
是支付成功后在客户端返回给客户看的回调地址,需要和开发配置中的授权回调地址对应,这是支付宝对支付的一种校验,这个地址建议不要写任何支付后的操作逻辑,因为用户有可能会在客户端切掉看不到而影响逻辑判断notify_url
是支付成功后支付宝通知给服务端的回调地址,这个地址注意要在公网可访问,因为支付宝会响应它,所以在本地测试中是不行的,必须上传到公网服务器,还有这里注意的是使用阿里云的免费https证书时候,这里如果地址是https会有一定失败率的,也就是说这里如果用了阿里云的免费https证书最好还是用回http地址响应,如果响应成功会echo出success这7个字符给支付宝,说明验签成功了,所以这个文件不要包含任何html代码,会影响结果输出,我们可以把支付后后端需要执行的逻辑放在这里,比如记录支付成功等完整的交易逻辑
最重要就是
WIDout_trade_no
商品订单号,自己定义的,当我们发送支付到自己后端时候记录这个订单号,等支付宝验签回来成功后,对比信息中的订单号完成一个完整的支付逻辑,还要注意的是支付宝应该是只能用form表单提交支付请求,因为返回来的是一个form的代码,当然你也可以动态创建form来发送支付请求,但我个人建议还是直接静态form的形式来得方便APP和网页支付
注意APP和网页都要各自通过
签约
才可以调用支付接口的,之前在这里浪费了很久时间一直测试都是报ALIN10146
错误就是因为忘记还没有APP签约APP内支付要真机连接查看返回的参数,注意后台PHP返回给APP的签名是不需要
htmlspecialchars
,不然这里会帮你把&
转&
,这里正确是&
,不然APP支付会报ALIN10146
The text was updated successfully, but these errors were encountered: