Home > Article > Web Front-end > 关于微信支付那点事–post–get传值失效_html/css_WEB-ITnose
(这篇文章默认支付接口是正确可用的)
在写项目的时候,客户要求做一个店铺扫码支付的功能,这个功能在支付宝上很容易实现,官网上集成了这个方法。
但是微信却不然,微信的这个功能实现需要程序员对于微信本身的公众号支付的接口进行二次开发。
开发的思路也很简单就是程序员这边做一个可以输入价格的界面,然后调用微信的公众号支付接口即可。
但是就这么简单的功能,我就卡了好几天。
出错的地方在于在线上微信内扫码打开上面的页面之后,点击表单提交,不论是get还是post都无法实现数据的正确传递。
基于我是一个从没有写过html页面的人,我一开始怀疑我的页面写的不对,我仔细检查完了之后,确定在除去线上微信内
的其他地方都是可以正确的得到预期的数据。
于是我就去问万能的度娘,得到的结果应该和大家的差不多,微信内post以及get传参有可能失败的,正当我准备骂娘的时候,
突然意识到,我们公司一直都在开发微信内的业务呀,也没发现有传参参不过来的问题呀。于是在稀里糊涂的搞了几天之后,我终
于发现了问题所在,吼吼!
对微信支付有一定了解的人都知道微信公众号支付即JSAPI支付需要去微信公众平台配置用户的支付权限目录,问题就出现在
这个支付目录,微信对于这个支付目录的限制很死,例如http://xxx/就是你设置的支付目录,那么你的支付接口代码写的路由至多
只能在设置好的支付目录下一层。不然都会报该路由没有支付权限。这只是其一,其二是进入支付目录的传参也会被微信保护,所
以get-post传的值会被微信取代或者拦截掉。
知道了上述的两点:那么解决方法也就很简单了,就是通过路由来传递参数,例如http://xxx/0-价格-备注,然后在后台的代
码中用 explode('-',变量名); 方法来对路由的最后部分进行字符串数组拆分,就可以在微信的规则下得到需要传递的参数了。
在这里我就不展示我php的代码了,因为里面都是公众号支付的代码,和此篇的文章内容不符合,我就冒昧的贴出我的html代码,
展示如何将参数放在路由上传递吧(其实也没什么)。
<html><head> <meta charset="UTF-8"> <title>微信扫码支付</title> <style> .hide{display: none;} </style></head><body><h1>微信扫码支付</h1> 数额:<input type="text" id = 'price' name="price" ></br> 备注:<input type="text" id = 'tradingReason' name= "tradingReason" ></br> <input class="hide" type="text" id = 'url' name= "url" value="{{ url }} "></br> <input type="submit" value="支付" onclick="sub(getValue('price'), getValue('tradingReason') , getValue('url'))"></body><script type="text/javascript"> /* * 模板套的时候单击事件中的跳转方法不要改变(不然值传不到后台)--对传送的价格要进行合法性的验证 * */ function getValue(id) { return document.getElementById(id).value; } function sub(price, tradingReason , url) { var str =url+'-'+price+'-'+tradingReason; self.location = str; }</script></html>
最后展示一下最终的劳动成果吧!
本文永久地址:http://blog.it985.com/16089.html
本文出自IT985博客 ,转载时请注明出处及相应链接。