本来聚合支付用的好好的,因为一些政策变动聚合支付审核条件变得繁琐苛刻,于是打算直接对接微信文档来支付。几年前接的微信还是V2版本整体比较简单,现在的V3接口用了RSA证书加密模式。跟着文档去分别下载了「商户API私钥」「微信支付平台证书」,然后用命令 openssl x509 -in 证书路径.pem -noout -serial 获取到了证书编号。根据github上提供的微信phpSDK样例做了尝试发现一直包证书问题The `certs(xxxxxxxxxxxxx)` contains the merchant's certificate serial number(xxxxxxxxxxxxx) which is not allowed here.

然后发现此证书非彼证书,apiclient_cert.pem这个证书不能直接使用,而是要手动下载一个平台证书:
composer exec CertificateDownloader.php -- -k ${商户后台自己填的32位api秘钥} -m ${商户id} -f ${本地私钥地址} -s ${证书编号} -o ${输出的证书文件名}我发现其实vendor/bin目录下已经有CertificateDownloader.php文件了,所以直接 php vendor/bin/CertificateDownloader.php 后面的参数也可以。换完证书就能正常请求了,可惜因为商户号很久没使用被停了,返回了"code":"NO_AUTH","message":"此商家的收款功能已被限制,暂无法支付。
linux上利用systemctl自启动自己的服务
2023-10-26
有时候需要有一些服务是可以跟着系统自启动的,这样服务器重启了也能立马正常使用。以前centos6点几的时候通常是把启动命令加到/etc/rc.local文件,或者用crontab定时任务来唤醒服务。现在有了更方便的systemctl可以更好地管理服务了,下面是操作步骤:
1.查看下这个服务是不是已经在自启动服务列表了.
systemctl list-unit-files |grep enabled|grep 服务名称2.如果没有这个服务的自启动就手动添加一个.
sudo vim /etc/systemd/system/你的服务名称.service#里面写下面的内容[Unit]Description=你的服务简介After=network.target[Service]ExecStart=启动服务要执行的命令(比如我写了个myserver.sh在根目录,那么就写/usr/bin/sh /root/myserver.sh)[Install]WantedBy=multi-user.target3.用:wq保存退出后自启这个服务。
systemctl enable 你的服务名称没报错的话就大功告成了!
关于通过api用腾讯企业邮箱发邮件的坑
2023-10-25
因为公司的业务需要要接paypal,梳理了下需求要用到企业邮箱给用户发激活邮件。流程其实很简单,就是用户填一下自己的邮箱然后把激活链接发送到邮箱里面让用户进到链接里面完成业务流程。然而实际操作的时候发现发送的邮件大多被退回了,查了下报错日志说是频繁发送垃圾邮件,奇怪的是我之前的项目频繁发验证码没有这种问题。查了一圈资料发现邮箱发送html网页带链接和一些特定的关键字容易被拒。为了进度最后只好改成发验证码,让用户填验证码然后在网页上完成业务流程。
测试一圈网易和qq邮箱都没问题以为可以上线了,然后想到用户主要是海外的就测了下gmail邮箱结果继续被拒。然后看了报错发现需要在企业邮箱域名管理后台加两条TXT记录:
腾讯邮箱(两条)
主机记录:@
记录类型:TXT
记录值:v=spf1 include:spf.mail.qq.com ~all
主机记录:_dmarc
记录类型:TXT
记录值: v=DMARC1; p=none; rua=mailto:mailauth-reports@qq.com
网易邮箱
主机记录:@
记录类型:TXT
记录值:v=spf1 include:spf.163.com -all