微信小程序之微信支付

news/2024/7/20 2:33:24 标签: 小程序

微信小程序之微信支付

开发微信小程序的时候,微信支付是经常使用的,下面我们简单梳理下操作的流程和步骤

先看下微信支付的开发文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1

除被扫支付场景以外,商户系统先调用统一下单接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易会话标识后再按扫码、JSAPI、APP、小程序等不同场景生成交易串调起支付,具体API接口请查看"API列表"

1、第一步先准备好一个已经认证好的微信小程序,并且接入了微信支付功能。具体怎么操作请查看,https://pay.weixin.qq.com/static/pay_setting/appid_protocol.shtml。然后准备好微信小程序appid,AppSecret,还有关联商户的mch_id,商户密钥

{
    appid:'小程序的ID,必备,无论是后面获取用户的openid,还是进行统一下单(微信小程序必须要)都需要到',
    AppSecret:'小程序的密钥,获取用信息',
    mch_id:'商户号,统一下单必备',
    key:'商户的密钥'
}

2、先使用wx.login,获取用户的信息,openid,参考文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html

小程序客户端,使用wx.login,方法获取用户的code,然后在开发者服务器后台调用auth.code2Session(https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html),使用 code 换取openid、unionid、session_key等信息

wx.login({
      success (res) {
        console.log(res);
        if (res.code) {
          wx.request({
            url: url,//后端的接口,把code传过去,然后后端请求获取用户信息
            data: {
              code: res.code,
              user_name:e.nickName
            },
            success: (res) => {
              console.log(res.data);
              if(res.data.ret){
                let userInfo = Object.assign(e,res.data)
                wx.setStorage({
                  key:"userInfo",
                  data:JSON.stringify(userInfo) 
                })
                wx.hideLoading()
                wx.stopPullDownRefresh()
              }else{
                wx.showToast({title: '登录失败',icon:'error',duration:2000})
                wx.hideLoading()
                wx.stopPullDownRefresh()
              }
            }
          })
          
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })

后端的请求接口

GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

3、获取到用户信息之后,就开始了统一下单的

应用场景:商户在小程序中先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易后调起支付。

接口API:URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder

请求参数,参考文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1

我这里根据需求呢,是在后端跑这个接口的,所以在小程序客户端,只需要发送请求,然后获取返回的信息,再跑微信支付接口

(1)给后端发送请求,跑统一下单API。因为小程序使用微信支付必须要用到用户的openid,

在这里插入图片描述

getPayMomey(e){
    //用户ID,在登录的时候已经存在本地了,就直接拿了
      let info = wx.getStorageSync('userInfo')
      let that = this
      wx.showLoading({title: '获取中', mask:"true"})
        var url = app.urlData.URL + '/wx/create_order' //后端接口
        var random = Math.random()
        var userInfo = JSON.parse(info)
        wx.request({
          url: url,
          data:{
            random:random,
            order_id:e.currentTarget.dataset.id, //订单IO,方便后端获取订单内商品信息
            openid:userInfo.user_info.openid 
          },
          header: {
            'content-type': 'application/json' // 默认值
          },
          success: (res) => {
            console.log(res.data);
            if(res.data.ret){
              wx.hideLoading()
              that.payWeixin(res.data)  //这里就是调用微信支付的接口方法
              wx.stopPullDownRefresh()
            }else{
              wx.hideLoading()
              wx.showToast({title: res.data.err_code_des,icon:'none',duration:2000})
              wx.stopPullDownRefresh()
            }
          }
        })
      
    },

(2)调用支付接口,需要用的签名,这个具体参考文档,https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5

我这里使用的是MD5签名类型

主要的参数

在这里插入图片描述

paySign=MD5(appId=wxd678efh567hg6787&nonceStr=5K8264ILTKCH16CQ2502SI8ZNMTM67VS&package=prepay_id=wx2017033010242291fcfe0db70013231072&signType=MD5&timeStamp=1490840662&key=qazwsxedcrfvtgbyhnujmikolp111111) = 22D9B4E54AB1950F51E0649E8810ACD6

wx.requestPayment(
{
"timeStamp":"",
"nonceStr": "",
"package": "",
"signType": "MD5",
"paySign": "",
"success":function(res){},
"fail":function(res){},
"complete":function(res){}
})

我的方法是

payWeixin(data){
    //data是统一下单接口返回的数据
      let that = this
      let random = (Math.random()).toString() //这个随机数,就是个坑,一定要变成字符串
      let timestamp=(new Date().getTime()).toString()//这个时间戳也是,一定要是字符串
      let mch_key = '商户密钥'
      //obj里面的key一定要是驼峰名称
      let obj = {
        appId:appId,
        nonceStr:random,
        package:"prepay_id="+data.prepay_id,
        signType:'MD5',
        timeStamp:timestamp
      }
      //参数名ASCII码从小到大排序(字典序)
      let arr = Object.keys(obj).sort().map(item => {
          return `${item}=${obj[item]}`;
      });
    //最后拼接上key(商户密钥)得到字符串
      let str = arr.join('&') + '&key=' + mch_key;
      console.log(str);
    //对str进行MD5运算,再将得到的字符串所有字符转换为大写
      let paySign = md5(str).toUpperCase()
      console.log(paySign);
      wx.requestPayment({
        "timeStamp":timestamp,
        "nonceStr": random,
        "package": "prepay_id="+data.prepay_id,
        "signType": "MD5",
        "paySign": paySign,
        "success":function(res){
            //在支付成功的回调里面,还行执行其他方法就要加setTimeout,不然会报错,我也不知道为什么
          setTimeout(function(){
            that.payOrderSuccess(data.order_id)//我们系统记录方法
          },200)
        },
        "fail":function(res){
          console.log(res);
          if (res.errMsg==='requestPayment:fail cancel') {
            wx.showToast({title: '用户取消支付',icon:'none',duration:2000})
          } else {
            wx.showToast({title: res.errMsg,icon:'none',duration:2000})
          }
        },
        "complete":function(res){}
      })
    },

(3)有时候会报错:requestPayment:fail cancel,提示:支付签名失败,官方给的是用户取消支付。但是报这个错,除了取消支付,还有可能就是上面的加签错误。所以就要注意下,一些坑

···加签的key值,一定要是驼峰值,除了package

···参数是字符串

···加签的字符串一定要在最后面加上key,商户密钥

···MD5加签之后,一定要变成大写

···在支付成功的回调里面,还行执行其他方法就要加setTimeout,不然会报错,我也不知道为什么

4、MD5加签的方法

创建MD5.js

!function(){"use strict";function t(t){if(t)d[0]=d[16]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=d[9]=d[10]=d[11]=d[12]=d[13]=d[14]=d[15]=0,this.blocks=d,this.buffer8=l;else if(a){var r=new ArrayBuffer(68);this.buffer8=new Uint8Array(r),this.blocks=new Uint32Array(r)}else this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.h0=this.h1=this.h2=this.h3=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0}var r="input is invalid type",e="object"==typeof window,i=e?window:{};i.JS_MD5_NO_WINDOW&&(e=!1);var s=!e&&"object"==typeof self,h=!i.JS_MD5_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;h?i=global:s&&(i=self);var f=!i.JS_MD5_NO_COMMON_JS&&"object"==typeof module&&module.exports,o="function"==typeof define&&define.amd,a=!i.JS_MD5_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,n="0123456789abcdef".split(""),u=[128,32768,8388608,-2147483648],y=[0,8,16,24],c=["hex","array","digest","buffer","arrayBuffer","base64"],p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),d=[],l;if(a){var A=new ArrayBuffer(68);l=new Uint8Array(A),d=new Uint32Array(A)}!i.JS_MD5_NO_NODE_JS&&Array.isArray||(Array.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)}),!a||!i.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(t){return"object"==typeof t&&t.buffer&&t.buffer.constructor===ArrayBuffer});var b=function(r){return function(e){return new t(!0).update(e)[r]()}},v=function(){var r=b("hex");h&&(r=w(r)),r.create=function(){return new t},r.update=function(t){return r.create().update(t)};for(var e=0;e<c.length;++e){var i=c[e];r[i]=b(i)}return r},w=function(t){var e=eval("require('crypto')"),i=eval("require('buffer').Buffer"),s=function(s){if("string"==typeof s)return e.createHash("md5").update(s,"utf8").digest("hex");if(null===s||void 0===s)throw r;return s.constructor===ArrayBuffer&&(s=new Uint8Array(s)),Array.isArray(s)||ArrayBuffer.isView(s)||s.constructor===i?e.createHash("md5").update(new i(s)).digest("hex"):t(s)};return s};t.prototype.update=function(t){if(!this.finalized){var e,i=typeof t;if("string"!==i){if("object"!==i)throw r;if(null===t)throw r;if(a&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||a&&ArrayBuffer.isView(t)))throw r;e=!0}for(var s,h,f=0,o=t.length,n=this.blocks,u=this.buffer8;f<o;){if(this.hashed&&(this.hashed=!1,n[0]=n[16],n[16]=n[1]=n[2]=n[3]=n[4]=n[5]=n[6]=n[7]=n[8]=n[9]=n[10]=n[11]=n[12]=n[13]=n[14]=n[15]=0),e)if(a)for(h=this.start;f<o&&h<64;++f)u[h++]=t[f];else for(h=this.start;f<o&&h<64;++f)n[h>>2]|=t[f]<<y[3&h++];else if(a)for(h=this.start;f<o&&h<64;++f)(s=t.charCodeAt(f))<128?u[h++]=s:s<2048?(u[h++]=192|s>>6,u[h++]=128|63&s):s<55296||s>=57344?(u[h++]=224|s>>12,u[h++]=128|s>>6&63,u[h++]=128|63&s):(s=65536+((1023&s)<<10|1023&t.charCodeAt(++f)),u[h++]=240|s>>18,u[h++]=128|s>>12&63,u[h++]=128|s>>6&63,u[h++]=128|63&s);else for(h=this.start;f<o&&h<64;++f)(s=t.charCodeAt(f))<128?n[h>>2]|=s<<y[3&h++]:s<2048?(n[h>>2]|=(192|s>>6)<<y[3&h++],n[h>>2]|=(128|63&s)<<y[3&h++]):s<55296||s>=57344?(n[h>>2]|=(224|s>>12)<<y[3&h++],n[h>>2]|=(128|s>>6&63)<<y[3&h++],n[h>>2]|=(128|63&s)<<y[3&h++]):(s=65536+((1023&s)<<10|1023&t.charCodeAt(++f)),n[h>>2]|=(240|s>>18)<<y[3&h++],n[h>>2]|=(128|s>>12&63)<<y[3&h++],n[h>>2]|=(128|s>>6&63)<<y[3&h++],n[h>>2]|=(128|63&s)<<y[3&h++]);this.lastByteIndex=h,this.bytes+=h-this.start,h>=64?(this.start=h-64,this.hash(),this.hashed=!0):this.start=h}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},t.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,r=this.lastByteIndex;t[r>>2]|=u[3&r],r>=56&&(this.hashed||this.hash(),t[0]=t[16],t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.bytes<<3,t[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},t.prototype.hash=function(){var t,r,e,i,s,h,f=this.blocks;this.first?r=((r=((t=((t=f[0]-680876937)<<7|t>>>25)-271733879<<0)^(e=((e=(-271733879^(i=((i=(-1732584194^2004318071&t)+f[1]-117830708)<<12|i>>>20)+t<<0)&(-271733879^t))+f[2]-1126478375)<<17|e>>>15)+i<<0)&(i^t))+f[3]-1316259209)<<22|r>>>10)+e<<0:(t=this.h0,r=this.h1,e=this.h2,r=((r+=((t=((t+=((i=this.h3)^r&(e^i))+f[0]-680876936)<<7|t>>>25)+r<<0)^(e=((e+=(r^(i=((i+=(e^t&(r^e))+f[1]-389564586)<<12|i>>>20)+t<<0)&(t^r))+f[2]+606105819)<<17|e>>>15)+i<<0)&(i^t))+f[3]-1044525330)<<22|r>>>10)+e<<0),r=((r+=((t=((t+=(i^r&(e^i))+f[4]-176418897)<<7|t>>>25)+r<<0)^(e=((e+=(r^(i=((i+=(e^t&(r^e))+f[5]+1200080426)<<12|i>>>20)+t<<0)&(t^r))+f[6]-1473231341)<<17|e>>>15)+i<<0)&(i^t))+f[7]-45705983)<<22|r>>>10)+e<<0,r=((r+=((t=((t+=(i^r&(e^i))+f[8]+1770035416)<<7|t>>>25)+r<<0)^(e=((e+=(r^(i=((i+=(e^t&(r^e))+f[9]-1958414417)<<12|i>>>20)+t<<0)&(t^r))+f[10]-42063)<<17|e>>>15)+i<<0)&(i^t))+f[11]-1990404162)<<22|r>>>10)+e<<0,r=((r+=((t=((t+=(i^r&(e^i))+f[12]+1804603682)<<7|t>>>25)+r<<0)^(e=((e+=(r^(i=((i+=(e^t&(r^e))+f[13]-40341101)<<12|i>>>20)+t<<0)&(t^r))+f[14]-1502002290)<<17|e>>>15)+i<<0)&(i^t))+f[15]+1236535329)<<22|r>>>10)+e<<0,r=((r+=((i=((i+=(r^e&((t=((t+=(e^i&(r^e))+f[1]-165796510)<<5|t>>>27)+r<<0)^r))+f[6]-1069501632)<<9|i>>>23)+t<<0)^t&((e=((e+=(t^r&(i^t))+f[11]+643717713)<<14|e>>>18)+i<<0)^i))+f[0]-373897302)<<20|r>>>12)+e<<0,r=((r+=((i=((i+=(r^e&((t=((t+=(e^i&(r^e))+f[5]-701558691)<<5|t>>>27)+r<<0)^r))+f[10]+38016083)<<9|i>>>23)+t<<0)^t&((e=((e+=(t^r&(i^t))+f[15]-660478335)<<14|e>>>18)+i<<0)^i))+f[4]-405537848)<<20|r>>>12)+e<<0,r=((r+=((i=((i+=(r^e&((t=((t+=(e^i&(r^e))+f[9]+568446438)<<5|t>>>27)+r<<0)^r))+f[14]-1019803690)<<9|i>>>23)+t<<0)^t&((e=((e+=(t^r&(i^t))+f[3]-187363961)<<14|e>>>18)+i<<0)^i))+f[8]+1163531501)<<20|r>>>12)+e<<0,r=((r+=((i=((i+=(r^e&((t=((t+=(e^i&(r^e))+f[13]-1444681467)<<5|t>>>27)+r<<0)^r))+f[2]-51403784)<<9|i>>>23)+t<<0)^t&((e=((e+=(t^r&(i^t))+f[7]+1735328473)<<14|e>>>18)+i<<0)^i))+f[12]-1926607734)<<20|r>>>12)+e<<0,r=((r+=((h=(i=((i+=((s=r^e)^(t=((t+=(s^i)+f[5]-378558)<<4|t>>>28)+r<<0))+f[8]-2022574463)<<11|i>>>21)+t<<0)^t)^(e=((e+=(h^r)+f[11]+1839030562)<<16|e>>>16)+i<<0))+f[14]-35309556)<<23|r>>>9)+e<<0,r=((r+=((h=(i=((i+=((s=r^e)^(t=((t+=(s^i)+f[1]-1530992060)<<4|t>>>28)+r<<0))+f[4]+1272893353)<<11|i>>>21)+t<<0)^t)^(e=((e+=(h^r)+f[7]-155497632)<<16|e>>>16)+i<<0))+f[10]-1094730640)<<23|r>>>9)+e<<0,r=((r+=((h=(i=((i+=((s=r^e)^(t=((t+=(s^i)+f[13]+681279174)<<4|t>>>28)+r<<0))+f[0]-358537222)<<11|i>>>21)+t<<0)^t)^(e=((e+=(h^r)+f[3]-722521979)<<16|e>>>16)+i<<0))+f[6]+76029189)<<23|r>>>9)+e<<0,r=((r+=((h=(i=((i+=((s=r^e)^(t=((t+=(s^i)+f[9]-640364487)<<4|t>>>28)+r<<0))+f[12]-421815835)<<11|i>>>21)+t<<0)^t)^(e=((e+=(h^r)+f[15]+530742520)<<16|e>>>16)+i<<0))+f[2]-995338651)<<23|r>>>9)+e<<0,r=((r+=((i=((i+=(r^((t=((t+=(e^(r|~i))+f[0]-198630844)<<6|t>>>26)+r<<0)|~e))+f[7]+1126891415)<<10|i>>>22)+t<<0)^((e=((e+=(t^(i|~r))+f[14]-1416354905)<<15|e>>>17)+i<<0)|~t))+f[5]-57434055)<<21|r>>>11)+e<<0,r=((r+=((i=((i+=(r^((t=((t+=(e^(r|~i))+f[12]+1700485571)<<6|t>>>26)+r<<0)|~e))+f[3]-1894986606)<<10|i>>>22)+t<<0)^((e=((e+=(t^(i|~r))+f[10]-1051523)<<15|e>>>17)+i<<0)|~t))+f[1]-2054922799)<<21|r>>>11)+e<<0,r=((r+=((i=((i+=(r^((t=((t+=(e^(r|~i))+f[8]+1873313359)<<6|t>>>26)+r<<0)|~e))+f[15]-30611744)<<10|i>>>22)+t<<0)^((e=((e+=(t^(i|~r))+f[6]-1560198380)<<15|e>>>17)+i<<0)|~t))+f[13]+1309151649)<<21|r>>>11)+e<<0,r=((r+=((i=((i+=(r^((t=((t+=(e^(r|~i))+f[4]-145523070)<<6|t>>>26)+r<<0)|~e))+f[11]-1120210379)<<10|i>>>22)+t<<0)^((e=((e+=(t^(i|~r))+f[2]+718787259)<<15|e>>>17)+i<<0)|~t))+f[9]-343485551)<<21|r>>>11)+e<<0,this.first?(this.h0=t+1732584193<<0,this.h1=r-271733879<<0,this.h2=e-1732584194<<0,this.h3=i+271733878<<0,this.first=!1):(this.h0=this.h0+t<<0,this.h1=this.h1+r<<0,this.h2=this.h2+e<<0,this.h3=this.h3+i<<0)},t.prototype.hex=function(){this.finalize();var t=this.h0,r=this.h1,e=this.h2,i=this.h3;return n[t>>4&15]+n[15&t]+n[t>>12&15]+n[t>>8&15]+n[t>>20&15]+n[t>>16&15]+n[t>>28&15]+n[t>>24&15]+n[r>>4&15]+n[15&r]+n[r>>12&15]+n[r>>8&15]+n[r>>20&15]+n[r>>16&15]+n[r>>28&15]+n[r>>24&15]+n[e>>4&15]+n[15&e]+n[e>>12&15]+n[e>>8&15]+n[e>>20&15]+n[e>>16&15]+n[e>>28&15]+n[e>>24&15]+n[i>>4&15]+n[15&i]+n[i>>12&15]+n[i>>8&15]+n[i>>20&15]+n[i>>16&15]+n[i>>28&15]+n[i>>24&15]},t.prototype.toString=t.prototype.hex,t.prototype.digest=function(){this.finalize();var t=this.h0,r=this.h1,e=this.h2,i=this.h3;return[255&t,t>>8&255,t>>16&255,t>>24&255,255&r,r>>8&255,r>>16&255,r>>24&255,255&e,e>>8&255,e>>16&255,e>>24&255,255&i,i>>8&255,i>>16&255,i>>24&255]},t.prototype.array=t.prototype.digest,t.prototype.arrayBuffer=function(){this.finalize();var t=new ArrayBuffer(16),r=new Uint32Array(t);return r[0]=this.h0,r[1]=this.h1,r[2]=this.h2,r[3]=this.h3,t},t.prototype.buffer=t.prototype.arrayBuffer,t.prototype.base64=function(){for(var t,r,e,i="",s=this.array(),h=0;h<15;)t=s[h++],r=s[h++],e=s[h++],i+=p[t>>>2]+p[63&(t<<4|r>>>4)]+p[63&(r<<2|e>>>6)]+p[63&e];return t=s[h],i+=p[t>>>2]+p[t<<4&63]+"=="};var _=v();f?module.exports=_:(i.md5=_,o&&define(function(){return _}))}();

然后在所需的界面的js里面引用

const md5 = require('../../assets/js/md5.js');

http://www.niftyadmin.cn/n/861493.html

相关文章

微信小程序之购物车功能

微信小程序的购物车使用的是Vant weapp的组件库来写的。 可以实现单选和全选功能&#xff1b;右滑删除购物车商品&#xff1b;计算商品价格 页面代码 <view><view wx:if"{{shopList.length > 0}}"><view style"margin:0 5px;"><…

微信小程序之微信登录

在开发微信小程序的时候&#xff0c;我们经常需要用到微信登录&#xff0c;通过wx的接口来获取微信用户的信息&#xff0c;然后存储到我们数据库来创建属于我们系统的用户信息。 所以我们就要使用到wx.login()&#xff0c;wx.getUserProfile()&#xff0c;这两个方法。 wx.log…

elementUI的表格多选功能之规定禁止选择

elementUI的el-table表格多选功能之禁用多选 在进行表格的多选的时候我们会碰到那种&#xff0c;只允许部分内容可以被选择&#xff0c;不符合的要禁用多选框&#xff0c;这个时候就要用到elementUI el-table的selectable 所以我们可以这样写 <el-table :data"tableD…

elementUI的日期选择器获取选择时间的格式,获取时间戳等

elementUI的日期选择器获取选择时间的格式&#xff0c;获取时间戳等 在使用日期选择器的时候&#xff0c;我们需要把时间进行格式化&#xff0c;然后再传给后端 比如传时间戳 value-format"timestamp"<el-form-item label"申请人生日" required>&…

微信小程序之获取小程序页面二维码

获取二维码 我们推荐生成并使用小程序码&#xff0c;它具有更好的辨识度。目前有两个接口可以生成小程序码&#xff0c;开发者可以根据自己的需要选择合适的接口。 接口A: 适用于需要的码数量较少的业务场景 接口地址&#xff1a;https://api.weixin.qq.com/wxa/getwxacode?…

前端常用的优化技巧

前端优化 ​ 前端的性能优化是比较重要的一个版块内容&#xff0c;适当的优化可以提升网站的性能。而前端优化有很多方面&#xff0c;我们来慢慢了解&#xff0c;但是不是所有的优化都是适合你当前的项目的&#xff0c;看你项目的需求&#xff0c;来选择适合的方法。 调试工具…

css的新玩法,语法与规则

css的新玩法&#xff0c;语法与规则 !important 语法&#xff1a; Selector{sRule!important;} 说明&#xff1a; 提升指定样式规则的应用优先权。 IE6及以下浏览器有个比较显式的支持问题存在&#xff0c;!important并不覆盖掉在同一条样式的后面的规则。请看下述代码&am…

微信小程序之地图

微信小程序之地图 简介 ​ 腾讯位置服务为微信小程序提供了基础的标点能力、线和圆的绘制接口等地图组件和位置展示、地图选点等地图API位置服务能力支持&#xff0c;使得开发者可以自由地实现自己的微信小程序产品。 在此基础上&#xff0c;腾讯位置服务微信小程序JavaScrip…