程咬金3斧头
程咬金3斧头
  • 发布:2019-04-29 00:26
  • 更新:2024-01-15 00:27
  • 阅读:10990

微信公众号H5,实现微信支付

分类:uni-app

最近看到有朋友问公众号内怎么实现微信支付和登陆,正好前些时候有做过,其实和普通H5网站实现是差不多的。今天有空,暂时先写下支付流程。

前提

  1. 已经申请成为微信商户
  2. 开通JSAPI支付

支付需要对接两个API

  1. 服务端,调用统一下单API,获得prepay_id 。官方文档 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
  2. 客户端(即H5),调用微信JS ,唤起微信支付。 官方文档 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6
  3. 不建议使用JSSDK,示例代码:
export default {  
    isWechat:function(){  
        var ua = window.navigator.userAgent.toLowerCase();  
        if(ua.match(/micromessenger/i) == 'micromessenger'){  
            return true;  
        }else{  
            return false;  
        }  
    },  
    jsApiCall(data ,callback_succ_func ,callback_error_func){  
        //使用原生的,避免初始化appid问题  
        WeixinJSBridge.invoke('getBrandWCPayRequest', {  
            appId:data['appId'],  
            timeStamp: data['timeStamp'],  
            nonceStr: data['nonceStr'], // 支付签名随机串,不长于 32 位  
            package: data['package'], // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)  
            signType: data['signType'], // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'  
            paySign: data['paySign'], // 支付签名  
        },  
        function(res) {  
            var msg = res.err_msg ?res.err_msg :res.errMsg;  
            //WeixinJSBridge.log(msg);  
            switch (msg) {  
                case 'get_brand_wcpay_request:ok': //支付成功时  
                    if(callback_succ_func){  
                        callback_succ_func(res);  
                    }  
                    break;  
                default: //支付失败时  
                    WeixinJSBridge.log('支付失败!'+msg+',请返回重试.');  
                    if(callback_error_func){  
                        callback_error_func({msg:msg});  
                    }  
                    break;  
            }  
        })  
    },  
    payment:function(data ,callback_succ_func ,callback_error_func){  
        if(!this.isWechat()){  
            return ;  
        }  
        if (typeof WeixinJSBridge == "undefined") {  
            if (document.addEventListener) {  
                document.addEventListener('WeixinJSBridgeReady', this.jsApiCall, false);  
            } else if (document.attachEvent) {  
                document.attachEvent('WeixinJSBridgeReady', this.jsApiCall);  
                document.attachEvent('onWeixinJSBridgeReady', this.jsApiCall);  
            }  
        } else {  
            this.jsApiCall(data ,callback_succ_func ,callback_error_func);  
        }  
    }  
}

在发起支付的页面,调用payment方法 。data参数需要从服务端获取。

4 关注 分享
君不见 rysnone HRK_01 y***@163.com

要回复文章请先登录注册

y***@163.com

y***@163.com

牛逼
2024-01-15 00:27
唐明明

唐明明

回复 4***@qq.com :
箭头函数
2023-12-22 16:51
1***@qq.com

1***@qq.com

请问一下,这个支付怎么调试啊?因为支付成功后要发送一个自定义请求,现在这个请求不知道有没有发送,手机上又看不出是否运行了
2023-04-27 12:00
rysnone

rysnone

厉害
2021-12-02 16:15
2***@qq.com

2***@qq.com

你好,我想问下。 微信内h5支付,你的code 码怎么弄的?
2020-02-28 22:12
UchihaSasuke

UchihaSasuke

回复 2***@qq.com :
同问, WeixinJSBridge可以支付,那么这个接口可以登陆吗?可以的话就不用jssdk了
2019-12-25 17:28
UchihaSasuke

UchihaSasuke

为什么不推荐使用JSSDK
2019-12-25 15:34
1***@qq.com

1***@qq.com

IBM
2019-12-23 23:00
4***@qq.com

4***@qq.com

很简单的方法,但是在支付回调里面,我只能使用showToast,使用api或者跳转方法都无效,这个是为什么呢
2019-09-16 00:11
uViewUI

uViewUI

登录很简单,几行js
2019-07-16 10:40