微信与支付宝二维码在页面中的使用

1.第一步 向支付宝发起请求订单请求之后支付宝会返还一个html代码,是一个表单提交,点击立即支付就会跳转到一个新的页面,只有二维码,在这个页面扫码即可完成支付

 


<form name="punchout_form" method="post" action="https://openapi.alipay.com/gateway.do?charset=utf-8&method=alipay.trade.page.pay&sign=wRN%2Faty2EaurePTgf8XEFhe%2F%2BQeScS8TFwYcgR%2FXYYozS2SpDbppeydHxlgUiH1ZgUzLtAZal3Vl8dfotLfguQw%2BynaSqUh%2F37eI5tvFoXXbnwJxiumsWKrZFK7zgY7Irmd6%2Br3jVhuQROdca5qlXSdQE5YN0qss3YNR1tLbUXmXrjKk3VfSamGrRJpolbHILrTud2MzqORTfy6HtimgBW2Fbk6dBij8hPSia2ICDgm0q%2BaT%2BaaD2Ce03pjROQSx8PbQkT5KdkhJdezJLum77QzcdEuR0GrlnRQiklB73WuJ2%2B9lmb6hnYRvDFvE6cuTlAPWudwX%2BnJeCdt94mpoRw%3D%3D&notify_url=http%3A%2F%2Fdev.scihua.com%2Fscihua%2Fwebapp%2Fnotify%2FaliPayCallBack&version=1.0&app_id=2019012263114447&sign_type=RSA2&timestamp=2019-04-10+13%3A03%3A41&alipay_sdk=alipay-sdk-java-3.4.49.ALL&format=json">↵<input type="hidden" name="biz_content" value="{&quot;out_trade_no&quot;:&quot;20190410417000&quot;,&quot;product_code&quot;:&quot;FAST_INSTANT_TRADE_PAY&quot;,&quot;qr_pay_mode&quot;:&quot;4&quot;,&quot;subject&quot;:&quot;SCI-HUA**订单&quot;,&quot;timeout_express&quot;:&quot;10m&quot;,&quot;total_amount&quot;:&quot;0.02&quot;}">↵<input type="submit" value="立即支付" style="display:none" >↵</form>↵<script>document.forms[0].submit();</script>

上面就是支付宝接口返回的html片段,使用v-html渲染到页面上去是什么都看不见的,必须把其中的none属性替换成blok 才会在页面中显示button按钮,如果我们想让他在页面中出现而不是跳转出现的话,我们需要使用iframe属性,iframe属性具体参考http://www.w3school.com.cn/tags/tag_iframe.asp,使用replace属性替换掉其中的字段

2.第二步   res.data.formInfo = res.data.formInfo.replace("<script>document.forms[0].submit();","<iframe style='border: 1px;' name='myFrame' width='210px' height='210px;'  ></iframe>")
其中res就是支付宝接口的正确返回值,
formInfo就是代码片段,将他的srcipt替换成我们需要的iframe标签,并且表明iframe标签的style

3.第三步 res.data.formInfo = res.data.formInfo.replace(`name="punchout_form"`,`name="punchout_form" target="myFrame" `)
我们再将他的name="punchout_form"替换成name="punchout_form" target="myFrame",其中的"为了避免转义我们使用的是字符串模板``,向iframe里面添加了name='myFrame',是因为支付宝表单采用的是post请求,具体可以参考文档https://www.cnblogs.com/java-chanjuan/p/7170257.html


4.第四步 this.zfbcode = res.data.formInfo
获取到替换之后的html代码将他执行到页面中

 

表单提交会触发post请求和支付宝接口带上的js文件,想要获取到二维码我们必须触发这个函数才能在iframe里面跳转到二维码,
this.$el.getElementsByTagName('form')[0].submit()  这个串代码可以触发当前绑定在from上面的submit这个方法,我们所需要做的就是延时执行他,写法参考文档https://segmentfault.com/q/1010000009106452 , 获取节点然后触发节点上的函数,

 

而微信的二维码则是返回一个支付链接,我们采用"vue-qriously"这个插件即可生成支付二维码

请求成功之后我们就可以把微信返回来的值绑定到value上面
在当前页面生成微信的二维码支付

 


 

 



 

posted on 2019-04-10 16:06  妄言  阅读(5371)  评论(0编辑  收藏  举报

导航