最近在开发中国邮政网汇通的Drupal接口模块uc_udpay,这个接口和以前的支付宝,财付通,以及预存款支付接口,本质上没有太大的区别。但是中国邮政网汇通的流程与其它的支付方式稍微有点不同。同时它采用的是RSA 加密。所以开发过程中,还是遇到了一些问题。
问题一,我把RSA相关的密钥存放在了variable表中,适用
$privateModulus = variable_get('uc_udpay_rsa_private_key', '');
variable_set('uc_udpay_rsa_private_key', '');
来存取。
在设置变量的值时出现了问题,那就是侧使用的密钥长度过长,超过了variable的128字节的限制。其中的一个测试密钥为:
30819f300d06092a864886f70d010101050003818d0030818902818100c53dd6b55a26b777876e3be3fbde68bd7170f5eaed91f63b66b10280030c49dd05b54bb1cdc714a6d7bd6a4a899685cd9b9bcca41d2ae49044aef3ab54f45e4ffdc47d0e6f973de6185cb7797b033f6798667ba521b01d6150cdb470d4247669f40b6400ad66defed973c5a55040b63c35f5aa8c2adb142452ec228d209830fd0203010001
另一个密钥更长,这样我就不能够使用variable_set来保存密钥了,这个时候不得不选用别的办法。
问题二,返回M004错误信息
returnInfo=null&whtFlow=null&success=N&errorType=M004
最初,接收不到来自网汇通的反馈消息,当接收到以后,发现上面的错误信息。还好,从我这里传过去的信息已经成功传过去了,而且我也成功的收到了它的反馈信息。至少这就是一个进步。后来发现一个字符串写错了,少写了一个字符。没有好的办法,只能一个一个的字段对比。
记录一下调试程序的辛苦,还没有完全搞定。
检查完上述的错误以后,又碰到了新的错误,txCode=TP
检查完上述的错误以后,又碰到了新的错误,
txCode=TP006&merchantId=10075&transDateTime=20081217121212&orderId=40&curCode=156&amount=D1DE72F750EF3ED9&merURL=http://localhost/zhbc3/udpay/notify&transType=DD01&info1=359434D529CBAE8...
查看关键的: returnInfo=null&whtFlow=null&success=N&errorType=M008
新的错误类型,翻了一下文档,竟然没有错误类型说明,这些人太官僚了.
至好一个一个设置测试数据,重新测试了一下,还是不行.又对比了一下demo程序中的代码,发现privateModulus,privateExponent设置错误了,
和demo程序中的保持一致.他们的demo程序其实也有问题,index.php这两个值设了默认值,我开始就是用得这两个默认值,结果提交程序他们用了另外两个值,换成他们的,终于返回了正确信息:
txCode=TP006&merchantId=10075&transDateTime=20081217121212&orderId=1888888&curCode=156&amount=0289AC6FAE2EB137&merURL=http://localhost/zhbc3/udpay/notify&transType=DD01&info1=359434D529CBAE8...