个人开发者如何在App中调起微信支付

本文主要介绍了个人开发者如何在自己的App中调起微信支付,重点讲述了前端和后端的实现方式。前端通过WebView加载H5支付链接,并在WebViewClient中处理微信支付的链接。后端使用YunGouOS的H5Pay方法生成支付链接,需要注意异步和同步回调地址的设置。在支付链接被拦截时,添加Referer并判断是否为微信支付链接来唤起微信。文章提供了一个Demo源码供下载体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要内容

  关于企业资质开发者申请的微信支付,如何调起微信支付的,官方文档已经很详细,且百度上也有很多相关资料,这里不再介绍。本篇主要讲的是个人资质的支付如何在自己的App中调起微信支付。

演示

image

实现方式

前端

  演示这边用的是YunGouOS(微信支付服务商))提供的个人资质支付接口,这里在App内唤起微信,主要是使用H5支付方式,通过在App的WebView加载付款的H5支付链接,然后对支付链接进行以下处理:

 webView.webViewClient = object : WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
                if (url.isNullOrEmpty()) {
                    return false
                }

                if (url.contains("https://wx.tenpay.com")) {
                    //是支付的url 添加Referer
                    val extraHeaders = HashMap<String, String>()
                    extraHeaders.put("Referer", BASE_URL)
                    view?.loadUrl(url, extraHeaders)
                    return true
                }


                try {
                    if (url.startsWith("weixin://")) {
                        if (url.startsWith("weixin://") && !hadInstalledWechat()){
                            //没有安装微信 则不跳转
                            return false
                        }

                        //唤起微信
                        val intent = Intent()
                        intent.action = Intent.ACTION_VIEW
                        intent.data = Uri.parse(url)
                        startActivity(intent)
                        return true
                    }
                } catch (e: Exception) {
                    return false
                }

                return super.shouldOverrideUrlLoading(view,url)
            }
            ...
     
 }

在WebViewClient的shouldOverrideUrlLoading()回调中进行处理,如果url包含https://wx.tenpay.com,则说明是微信H5支付的链接,需要为WebView添加Referer,值为唤起微信支付的域名,绑定你服务器的域名,这个需要先在微信后台进行绑定,可以让YunGouOS(微信支付服务商)客服人员帮你进行绑定,然后就可以调起了

后端

通过调用YunGouOS官方SDK中的H5Pay方法,生成支付链接:

 String payBody = "会员充值";
 String payUrl = WxPay.H5Pay(orderNum, money, wxMChid, payBody, attach, notifyUrl, returnUrl, "", "", "", wxKey);

参数说明:

  • orderNum: 商户的订单号,也就是自己系统的订单号;
  • money: 金额,元为单位;
  • wxMChid: 微信商户号,在YunGouOS(微信支付服务商)开通支付后可以获取
  • payBody 商品简单描述
  • attach 附加数据,回调时候原路返回
  • notifyUrl 异步回调地址
  • returnUrl 同步回调地址,演示中支付完成后会跳转到支付结果查询的网页,就是因为传入了同步回调地址;
  • 其他三个传空的为分账需要填入的参数,这里不需要用到分账可以直接填空字符串;
  • wxKey 微信支付的key,在YunGouOS(微信支付服务商)开通支付后可以获取

注意:

  传入returnUrl同步回调地址,并不代表支付成功才会跳转此网址,无论是否支付成功,调起微信支付后,5秒后会自动跳转此地址,所以应该做的是,在同步回调的网页中,添加查询支付结果的逻辑,请求自己查询支付结果的接口,然后判断是否已经支付,显示支付成功或失败。

总结

主要就是对拦截到的url进行判断,如果是支付的链接地址,则添加Referer, 如果是微信scheme协议(weixin://),则进行唤起微信的操作。为了方便大家参考,已经将代码上传到github,供各位参考,下方有相应demo的下载地址,可以下载体验。

下载体验

image

Demo源码下载

https://github.com/chaychan/WechatH5PayDemo

### UniApp 实现的 APP 微信支付与小程序微信支付的区别 #### 支付集成方式 对于UniApp应用而言,在不同平台上的支付功能需要通过调用相应平台的能力接口来完成。当涉及到微信环境下的支付时,无论是H5页面还是原生插件形式,都需要遵循微信公众平台所提供的API文档说明[^1]。 而对于微信小程序来说,其内置了专门用于处理支付流程的一套机制,开发者可以直接利用`wx.requestPayment()`方法发起支付请求,并且整个过程更加紧密地集成了微信生态体系内的安全校验措施以及用户体验设计[^2]。 #### 开发复杂度对比 在UniApp中实现跨平台兼容性的支付解决方案可能会增加一定的开发难度和技术栈的选择考量。因为这不仅涉及到了解各个目标平台关于移动支付的具体规定,还需要确保一套代码能够在多端正常工作并保持一致的行为逻辑。 相比之下,专门为微信小程序定制化的支付模块则显得更为简单直接,只需按照官方指南编写少量必要的配置项就能快速上线使用,减少了因适配其他渠道而带来的额外负担。 #### 用户体验一致性 由于UniApp旨在构建一次编码多处部署的理想状态,所以在实际操作过程中难免会遇到一些细微差别影响最终呈现效果;特别是在像支付这样敏感环节上更需谨慎对待可能出现的不同表现形式。 然而,微信小程序凭借高度针对性的设计理念,在这方面往往能够提供给用户更加流畅自然的操作感受,从唤起支付界面到完成交易确认都能较好地契合大众习惯,从而提升整体满意度水平。 ```javascript // 示例:UniApp调用微信支付 API (简化版) uni.request({ url: 'https://example.com/getPayParams', // 获取预支付订单参数接口地址 method: "POST", data: { body: "test", out_trade_no: new Date().getTime(), total_fee: 1, spbill_create_ip: "8.8.8.8" }, success(res){ let payParam = res.data; uni.requestPayment({ provider:'wxpay', timeStamp: payParam.timeStamp, nonceStr: payParam.nonceStr, package: payParam.packageValue, signType: payParam.signType, paySign: payParam.paySign, success() { console.log('success');}, fail(e){console.error(JSON.stringify(e));} }); } }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值