当前位置:首页 > 娱乐

逍遥商城对接易支付

昨天下午,逍遥我的商城技术群又炸了。一个做虚拟商品的对接老哥发截图,说他的易支逍遥商城接的易支付突然掉单——用户付了钱,订单却卡在“待付款”状态。逍遥底下跟了二十多条回复,商城全是对接问“怎么配的”“回调地址填了没”。这种场景我见得太多了,易支几乎每周都有人踩同一个坑。逍遥

逍遥商城和易支付的商城对接,本质上就三件事:拿到商户ID和密钥,对接填对异步通知地址,易支处理好签名验证。逍遥先说第一件。商城很多人以为易支付的对接密钥就是登录密码,拿后台那个32位字符串就往逍遥商城的“商户密钥”框里粘。结果支付请求发出去,易支付返回“签名错误”。密钥在易支付后台的“商户信息”页,点“查看”还要输一次支付密码才能复制完整,少复制一位都不行。我见过最离谱的,有人把密钥里的字母“I”看成数字“1”,排查了一整晚。

第二件事是回调地址。逍遥商城后台的“支付接口配置”里,有个“异步通知地址”栏。这里必须填你的网站域名加上/pay/notify.php这样的路径,而且域名后面不能带斜杠,也不能用IP地址。有次我帮朋友排查,他填的是http://localhost:8888/notify,本地测试没问题,一上线就失效——因为服务器根本访问不到他自己电脑的localhost。正确做法是填线上真实域名,比如https://shop.example.com/pay/notify.php。填完之后,去易支付后台把同样的地址也填一遍,两边必须完全一致,大小写都不能差。

签名验证这块,最容易出鬼。逍遥商城自带一套RSA验签逻辑,但有些版本的源码里,验签函数写的是openssl_verify,而你的PHP环境没开OpenSSL扩展。那怎么办?页面会白屏,或者直接报“Call to undefined function”。判断方法很简单:在商城根目录写个phpinfo.php,打开看有没有openssl那一栏。没有的话,去宝塔面板的PHP设置里把扩展勾上,重启PHP-FPM就完事。别急着改代码,先查环境。

还有个容易被忽略的细节——支付状态码。易支付回调里,trade_status字段返回TRADE_SUCCESS才是成功,TRADE_FINISHED是交易完成且不可退款。逍遥商城默认只认TRADE_SUCCESS,如果你在易支付后台开了“即时到账”,那没问题。但如果你用的是担保交易模式,第一次回调可能返回WAIT_BUYER_PAY,商城会误判为失败,直接标记订单异常。这种问题最恶心,因为日志里看不出明显错误,就是订单状态不对。

最后说个实战技巧。对接完成后,别急着上线。用易支付官方的“测试支付”功能,充一分钱走一遍全流程。重点看两处:一是支付成功后页面跳转是否正常,二是商城后台订单状态是否变成“已支付”。如果订单还是待付款,立刻打开逍遥商城根目录下的/pay/notify.php,在文件头部加一行file_put_contents('log.txt', file_get_contents('php://input'), FILE_APPEND);,然后重新支付一次,打开log.txt看易支付到底发了什么数据过来。八成是参数名对不上,比如易支付传的是out_trade_no,而商城代码里读的是order_id。这种字段映射问题,只能靠日志定位,瞎猜纯属浪费时间。

老实说,逍遥商城这源码质量一般,注释少,变量命名随意,但胜在轻量,适合个人站长。易支付接口文档也写得稀碎,全靠社区互相抄。你真想一次调通,就按我说的顺序来:环境检查→密钥填写→回调地址核对→测试支付→看日志。每一步别跳,十分钟能搞定的事,省得后面熬夜抓头发。

分享到: