电脑端支付宝支付 -前端获取支付宝返回的form 以及submit 调用支付扫码页面

前端调取支付宝支付接口(后台进行封装,没有直接调取支付宝接口),调用返回的数据中,将会有一串的form表单数据返回,我们需要将此表单在当前调用页面submit下,以跳转到支付扫码页;

支付宝返回的form 数据:

<form name="punchout_form" method="post" action="https://openapi.alipay.com/gateway.do?charset=GBK&method=alipay.trade.page.pay&sign=tXR6yxB9Uowu7tfbXVPHBoQXeyOqP2JXvo%2Fzmz%2BIA08aWin63h1%2FF7gHNN7I2K%2FnTV3ZYtvPkILu%2FS8uPmzpsAv1SJev0UNN2AbLDIGvbd%2BWn5neyIUqKcu5ySP1S8Bt4fbnvkMgnlijR25obVi5aFbj99JBZDrpeJ5cB9uq7Ccx7nX54%2F7coNv26PFD%2FPirlIKVVr2avD2w%3D%3D&return_url=http%3A%2F%2Fwww.shanshiwangluo.com%2F%23%2FpayNotify&notify_url=http%3A%2F%2Fwww.shanshiwangluo.com%2Fssmall%2Fportal%2Forder%2Fpay%2FaliCallback&version=1.0&app_id=2018062260383877&sign_type=RSA2&timestamp=2018-12-15+17%3A13%3A32&alipay_sdk=alipay-sdk-java-dynamicVersionNo&format=json">
<input type="hidden" name="biz_content" value="{    &quot;out_trade_no&quot;:&quot;1812141933252566&quot;,    &quot;product_code&quot;:&quot;FAST_INSTANT_TRADE_PAY&quot;,    &quot;total_amount&quot;:0.02,    &quot;subject&quot;:&quot; 订单:1812141933252566&quot;,    &quot;extend_params&quot;:{    &quot;sys_service_provider_id&quot;:&quot;2018062211454921&quot;    }  }">
<input type="submit" value="立即支付" style="display:none" >
</form>
<script>document.forms[0].submit();</script>

 

实例代码:

//支付宝支付
        async aliPay(orderCode,phone,price){
               var resp=await aliPay(orderCode,phone,price);
               if(resp.msg=="SUCCESS"){
                   const div=document.createElement('divform');
                   div.innerHTML=resp.data;
                   document.body.appendChild(div);
                   document.forms[0].acceptCharset='GBK';//保持与支付宝默认编码格式一致,如果不一致将会出现:调试错误,请回到请求来源地,重新发起请求错误代码 invalid-signature 错误原因: 验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配
                   document.forms[0].submit();
               }else{
                   this.$alert("错误:"+resp.data,"提示",{
                       confirmButtonText:'确定'
                   });
               }
           },

 * 温馨提示:在form submit 前,必须设置 acceptCharset='GBK' ,此处不一定是要GBK ,可以是UTF-8 ,前提是支付宝返回的action 必须是UTF-8  ,需保持一致 

第一次接触支付宝电脑端扫描支付,在这个编码格式上花了我几个小时的时间,找到问题后,真的觉得非常无语。。。。

报错误截图:

 

转载于:https://www.cnblogs.com/zty-Love/p/10123953.html

在Vue中调用支付宝扫码支付的步骤如下: 1. 首先,需要了解pc支付宝支付的方式。根据支付宝官方文档,pc支付宝支付分为两种情况:前置模式和跳转模式。前置模式是将生成的二维码嵌入到页面中,用户进行扫码支付。跳转模式是将用户跳转到支付宝页面进行扫码支付。 2. 在前置模式下,首先需要通过后端提供的接口获取支付宝的数据。这个接口应该返回支付宝form数据,最好还包括一个订单号。使用iframe将form数据放在页面上,生成二维码供用户扫码展示。 3. 在用户扫码展示之后,你可以设定一个定时器来不断请求后端提供的一个接口,用来判断是否支付完成。这个接口可以查询支付结果,并根据结果做相应的处理。 需要注意的是,在微信支付中,pc无法得到扫码支付的结果,所以需要设置定时器来不断请求后端接口来判断是否支付完成。而在支付宝支付中,可以选择前置模式或跳转模式来实现扫码支付。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue项目在PC支付(支付宝+微信)](https://blog.csdn.net/ahwangzc/article/details/128933450)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue pc支付宝支付-前端需要做的事情](https://blog.csdn.net/weixin_47284756/article/details/122602293)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值