vue获取openid并完成微信支付功能

export default {
    name: "getopenid",
    data(){
        return {
        }
    },
    methods:{
        /**
         * 获取URL参数
         * @returns {Object}
         */
        getUrlCode(){
            var url = location.search
            var theRequest = new Object()
            if (url.indexOf("?") != -1){
                var str = url.substr(1)
                var strs = str.split("&")
                for(var i = 0; i < strs.length; i ++){
                    theRequest[strs[i].split("=")[0]]=(strs[i].split("=")[1])
                }
            }
            return theRequest
        },
    },
    mounted() {
        var local = window.location.href; // 获取页面url
        var appid = '你的app ID ';
        this.code = this.getUrlCode().code;// 截取code
        this.course_id = this.$route.params.courseId;
        this.order_no = this.$route.params.orderno;
        if (this.code == null || this.code === ''){
            // 没有code去拿code;
            window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`
        }else{
            // 获取得code
            // 拿着code去获取openId
            this.$http.get('/xxxx/xwechatOpenid',{},{emulateJSON:true}).then((res)=>{
                // 获取openid
                res.data.openid;
                //
                //...
            })
        };
    }
}

图片.png

接下来就可以放开干支付,分享等其他功能了。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的示例代码,演示如何使用Vue和Spring Boot实现微信支付: 前端Vue代码: ```vue <template> <div> <button @click="pay">微信支付</button> </div> </template> <script> import axios from 'axios' export default { methods: { pay() { axios.post('/api/wechat/pay').then(response => { const data = response.data WeixinJSBridge.invoke( 'getBrandWCPayRequest', { 'appId': data.appId, //公众号名称,由商户传入 'timeStamp': data.timeStamp, //时间戳,自1970年以来的秒数 'nonceStr': data.nonceStr, //随机串 'package': data.packageValue, 'signType': data.signType, //微信签名方式: 'paySign': data.paySign //微信签名 }, function (res) { if (res.err_msg == 'get_brand_wcpay_request:ok') { alert('支付成功') } else if (res.err_msg == 'get_brand_wcpay_request:cancel') { alert('取消支付') } else { alert('支付失败') } } ) }) } } } </script> ``` 后端Spring Boot代码: ```java @RestController @RequestMapping("/api/wechat") public class WechatController { @Autowired private WechatPayService wechatPayService; @PostMapping("/pay") public Map<String, String> pay() throws Exception { return wechatPayService.unifiedOrder(); } } @Service public class WechatPayServiceImpl implements WechatPayService { @Autowired private WechatPayConfig wechatPayConfig; @Override public Map<String, String> unifiedOrder() throws Exception { //生成微信支付参数 Map<String, String> parameters = new HashMap<>(); parameters.put("appid", wechatPayConfig.getAppId()); parameters.put("mch_id", wechatPayConfig.getMchId()); parameters.put("nonce_str", UUID.randomUUID().toString().replace("-", "")); parameters.put("body", "测试商品"); parameters.put("out_trade_no", UUID.randomUUID().toString().replace("-", "")); parameters.put("total_fee", "1"); parameters.put("spbill_create_ip", "127.0.0.1"); parameters.put("notify_url", wechatPayConfig.getNotifyUrl()); parameters.put("trade_type", "JSAPI"); parameters.put("openid", "openid"); String sign = WechatPayUtil.generateSignature(parameters, wechatPayConfig.getKey()); parameters.put("sign", sign); //调用微信支付统一下单API String xml = WechatPayUtil.mapToXml(parameters); String result = HttpUtil.post(wechatPayConfig.getUnifiedOrderUrl(), xml); Map<String, String> resultMap = WechatPayUtil.xmlToMap(result); //生成前端需要的支付参数 Map<String, String> payParameters = new HashMap<>(); payParameters.put("appId", wechatPayConfig.getAppId()); payParameters.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000)); payParameters.put("nonceStr", UUID.randomUUID().toString().replace("-", "")); payParameters.put("packageValue", "prepay_id=" + resultMap.get("prepay_id")); payParameters.put("signType", "MD5"); String paySign = WechatPayUtil.generateSignature(payParameters, wechatPayConfig.getKey()); payParameters.put("paySign", paySign); return payParameters; } } @Configuration @ConfigurationProperties(prefix = "wechat.pay") public class WechatPayConfig { private String appId; //公众账号ID private String mchId; //商户号 private String key; //商户密钥 private String unifiedOrderUrl; //统一下单地址 private String notifyUrl; //支付结果通知地址 //省略getter和setter方法 } ``` 以上代码示例中,前端Vue代码中使用axios发送POST请求到后端的`/api/wechat/pay`接口,后端Spring Boot代码中生成微信支付参数,调用微信支付统一下单API,然后将生成的前端需要的支付参数返回给前端。前端再将支付参数传给微信客户端进行支付。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值