织梦网站增加支付接口
织梦后台的织梦增加支付“支付接口”菜单点开,默认只有货到付款和银行汇款。网站想接支付宝或微信,接口得自己写代码或者装插件。织梦增加支付上周帮一个卖手工皮具的网站客户处理这个问题,他的接口站是DedeCMS 5.7 SP2,PHP 7.4,织梦增加支付服务器在阿里云。网站折腾一下午,接口总算把微信Native支付跑通了。织梦增加支付过程不复杂,网站但有几个坑值得记下来。接口 先明确一点:织梦没有官方支付模块。织梦增加支付所有第三方支付都得靠二次开发。网站网上流传的接口“织梦支付宝接口”大多是2015年前后的老代码,用的还是MD5签名,现在支付宝开放平台早就换成RSA2了。直接拿来用会报“sign check fail”。我试过三个不同来源的插件,两个在回调验签环节就挂了,另一个虽然能付款,但订单状态不同步——用户付完钱,织梦后台还是“未付款”。 微信支付这边相对好办。去微信支付商户平台申请Native支付,拿到商户号、APIv3密钥和证书。关键一步:在织梦根目录建一个 回调通知是重灾区。微信会往你设置的notify_url发POST JSON,织梦默认会过滤掉 支付宝当面付更简单些。用 订单状态同步的逻辑得自己写。微信和支付宝的回调只告诉你“支付成功”,不会帮你改织梦的 测试时用内网穿透。ngrok免费版够用,但微信要求回调地址是https且不能带端口。花6块钱买个临时域名加SSL,比折腾nginx反代省事。支付宝沙箱环境可以直接用http,但正式环境必须https。有个细节:织梦的 最后说个真实翻车案例。客户之前找外包写了个“聚合支付”,结果那哥们把微信商户私钥写在了JS里。上线三天被人刷了200多笔1分钱订单,虽然金额小,但商户号被风控了。所以,签名和验签必须在服务端做,前端只负责展示二维码。织梦再老,这点底线得守住。 整套下来,微信Native支付大概200行代码,支付宝当面付150行左右。不用改织梦核心文件,全放在/pay/wechat/文件夹,把官方PHP SDK丢进去。然后找到/plus/car.php(如果是商城模块)或者自定义的订单提交页,在生成订单后插入一段调用代码。注意,织梦的订单号是$order_sn,但微信要求out_trade_no长度不超过32位,而织梦默认的订单号是20位数字加时间戳,一般够用。如果不够,截取后20位也行,但回调时得能反查回原订单。php://input,因为common.inc.php里有一句if(!get_magic_quotes_gpc())之类的老逻辑。解决办法:在回调文件开头直接file_get_contents('php://input'),不要走织梦的初始化。我一开始把回调文件放在织梦框架内,结果$_POST永远是空的,查了两小时才发现是checkSql函数把原始流吃掉了。alipay.trade.precreate接口,返回二维码链接。织梦模板里加一个就行。但要注意:支付宝要求异步通知返回success,且不能带任何HTML标签。织梦的exit()函数在某些版本会输出空白页,得用echo 'success'; die();。另外,商户私钥别放在web目录下,我见过有人直接扔在/data/里,结果被下载了。#@__shops_orders表。需要在回调里执行UPDATE `#@__shops_orders` SET `state`=1 WHERE `order_sn`='xxx'。但织梦的表前缀不固定,得用$dsql->ExecuteNoneQuery或者直接读$cfg_dbprefix。我习惯用$dsql,虽然老但稳。cfg_basehost如果填的是http,生成的回调URL也会是http,微信会拒绝。得在回调文件里硬编码https地址,或者改cfg_basehost。/pay/目录下。唯一要动的是订单提交页,加一个“选择支付方式”的单选按钮。别用织梦自带的“支付方式”字段,那个是给货到付款用的,改了容易和后台订单列表冲突。
-
上一篇
-
下一篇