姗姗来迟的Magento微信支付接口插件
半年之前,有朋友网站需要接入微信支付,是Magento站,于是花费了近二周时间,研究微信开发文档、示例代码,并初步制作了个支付模块,不巧的是,朋友的微信支付接口账户没申请成功,这麻烦了,没实际账户测试,于是去微信开发平台准备申请个测试接口账户。遗憾的是这微信搞的东西太复杂,申请个测试账户也没下来,于是就耽搁了。
九月份的时候,上海一客户的网站购买了我们的支付宝模块,感觉很是满意,后来又问是否有微信的支付模块,客户的微信支付接口早已申请下来了,于是把之前开发的微信模块拿出来测试修改。 遇到了很多意想不到的问题,首先是微信支付分为四种:刷卡支付(线下)、扫码支付(PC网站)、公众号支付(微信中打开商户的H5页面)、APP支付(移动端支付),客户需要的微信扫码支付,而之前开发的是公众号支付,于是重新按照新的支付文档开发。
微信支付比支付宝复杂多了,示例代码也比较反人类。本来简单的流程,结果给编写的异常复杂,一些另类开发人员,通常喜欢把简单东西复杂化,炫耀技巧。示例代码中还有几处明显的错误,很快解决掉了,却恰恰有一隐藏的bug,搞的magento系统都崩溃了,百思不得其解,只好在可疑代码中一段一段排查,测试了20多个单,终于抓到了这罪魁祸首!libxml_disable_entity_loader(true); 就是这条代码,使用完要 libxml_disable_entity_loader(false); 关掉该选项才行。否则影响Magento XML解析,导致异常。
另外一个问题是,微信扫码后,不会自动跳转回网站,需要在扫一扫页面,增加个ajax每隔几秒钟循环检查支付是否成功,如果成功后,则跳转回网站来显示支付成功信息给用户,并清空购物车。顺带一提的是,微信扫码页面做的既精简又美观大方,是借用腾讯云的支付页面。最后在Magento中生成合适大小的二维码也花费了不少时间。