自己写的,并录制了支付宝支付demo请戳这里https://download.lllomh.com/cliect/#/product/J302659722615829微信支付请点这里https://segmentfault.com/a/1190000039401866沙盒环境(Beta)是辅助开发者进行接口功能开发和主要功能联调的辅助环境,模拟部分产品在平台上的开发开放平台主要功能和主要逻辑。可以用来了解产品上线前的环境,组合调试各种接口。沙盒环境配置打开支付宝开发者中心并登录,点击=>进入我的控制台(也可以登录后自动进入),不需要企业账号,个人也可以在开发者中心的开发服务下点击R&D服务,进入沙箱环境页面,可以看到沙箱应用中的基本配置。KeyConfiguration点击??RSA2(SHA256)KeySettings,点击AlipayKeyGenerator,下载相应版本的工具,下载完成后,将工具安装到不包含空格的目录下,点击Open,点击GenerateKey,可以生成商户应用私钥和商户应用公钥。然后单击复制公钥。回到沙盒界面,选择公钥,将刚刚复制的公钥粘贴进去;然后就可以得到支付宝公钥,代码中会用到。1、封装配置alipayUtil.jsconstAlipaySdk=require('alipay-sdk').default;//importSDKconstalipaySdk=newAlipaySdk({appId:'2021000117615613',//在开放平台创建应用时生成的appIdsignType:'RSA2',//签名算法,默认RSA2网关:'https://openapi.alipaydev.com/gateway.do',//支付宝网关地址,需要修改alipayPublicKey:'',//支付宝公钥,验证结果时必须填写privateKey:'',//应用私钥字符串});module.exports=alipaySdk;//官方环境下,将上面的替换成官方的即可。2、接口定义创建支付宝需要的form表constformData=newAlipayFormData();formData.setMethod('get');添加通知(如果需要)formData.addField('notifyUrl','https://www.baidu.com');//支付成功的回调地址,必须是可以直接访问的地址,不能带参数然后是需要的订单参数formData.addField('bizContent',{outTradeNo:orderId,//商户订单号,64个字符以内,可以包含字母,数字,下划线,不能重复productCode:'FAST_INSTANT_TRADE_PAY',//销售商品编码,与支付宝签约的商品代号,只支持FAST_INSTANT_TRADE_PAYtotalAmount:'0.01',//订单总金额,单位为元,精确到小数点后两位subject:'product',//ordertitlebody:'productdetails',//orderdescription});之后就是成功回调:卡在这里好久了:formData.addField('returnUrl','https://opendocs.alipay.com');//加到这里才有效果,不是加到bizContent最后提交到官网,而是用官网文档:constresult=alipaySdk.exec(//result可以跳过进入支付链接url'alipay.trade.page.pay',//统一收付款页面接口{},//api请求参数(包括“公共请求参数”和“业务参数"){formData:formData},);订单查询(可用与否):/***添加购物车提交订单支付宝支付查看订单状态是否成功*/router.post('/api/member/queryOrderAlipay',(req,res)=>{letorderId=req.body.orderIdconstformData=newAlipayFormData();formData.setMethod('get');formData.addField('bizContent',{orderId});//通过该接口主动查询订单状态constresult=alipaySdk.exec('alipay.trade.query',{},{formData:formData},);axios({method:'GET',url:result}).then(data=>{letr=data.data.alipay_trade_query_response;if(r.code==='10000'){//接口调用成功switch(r.trade_status){case'WAIT_BUYER_PAY':res.send({"success":true,"message":“成功s","code":200,"timestamp":(newDate()).getTime(),"result":{"status":0,"massage":'交易已创建,等待买家pay'}})break;case'TRADE_CLOSED':res.send({“success”:true,“message”:“success”,“code”:200,“timestamp”:(newDate()).getTime(),"result":{"status":1,"massage":'未支付的交易将超时关闭,或支付完成后全额退还'}})break;case'TRADE_SUCCESS':res.send({"success":true,"message":"success","code":200,"timestamp":(newDate()).getTime(),"result":{"status":2,"massage":'交易支付成功'}})休息;case'TRADE_FINISHED':res.send({"success":true,"message":"success","code":200,"timestamp":(newDate()).getTime(),"result":{"status":3,"massage":'交易结束,不退款'}})break;}}elseif(r.code==='40004'){res.send('交易不存在');}}).catch(err=>{res.json({msg:'queryfailed',err});});})到这里就完成了,成功返回支付地址前端就可以了地址跳到这里支付。成功后跳转到回调成功页面。界面演示前端直接请求然后获取地址:goPay(){letdata={orderId:'t454545212121'//随便生成一个唯一的自己找这个}varinstance=this.$axios.create({headers:{'content-type':'application/x-www-form-urlencoded'}});//代理到http://localhost:3000/api/pcpayinstance.post(`http://localhost:3000/api/pcpay`,this.$qs.stringify(data)).then(res=>{this.data=res;window.open(res.data.result)});盒子版app扫描二维码支付即可看到效果。点击下图查看动画效果演示希望大家多多支持。您的评论和点赞是我的动力。有什么问题可以留言,谢谢各位网友
