微信上传下载图片功能若想使用JS-SDK接口,首先需要通过wx.config接口进行权限验证,其中参数appId、timestamp、nonceStr、signature、jsApiList需要进行赋值。
wx.config({
debug: false,
appId: 'wxe49d******43c1cd',
timestamp: timestamp,
nonceStr: nonceStr,
signature: signature,
jsApiList: ["chooseImage","previewImage","uploadImage","downloadImage"]
});
一、获取access_token
access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。可以通过AppID和SECRET调用本接口来获取access_token。AppID和SECRET可在微信公众平台开发者中心页中获得。
def getAccessToken()
{
def APPID = ""
def SECRET = ""
URL url = new URL("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET")
def params = "APPID=" + URLEncoder.encode(APPID, 'UTF-8') + "&SECRET=" + URLEncoder.encode(SECRET, 'UTF-8')
HttpURLConnection connection = (HttpURLConnection) url.openConnection()
connection.setDoOutput(true)
connection.setRequestMethod("POST")
connection.outputStream.withWriter { Writer writer -> writer.write params }
def response = connection.inputStream.withReader { Reader reader -> reader.text }
def accessToken = JSON.parse(response).getAt("access_token")
return accessToken
}
注:access_token的有效期7200秒,所以必须在自己的服务全局缓存access_token值
二、获取jsapi_ticket
jsapi_ticket是公众号用于调用微信JS接口的临时票据,通过access_token来获取。
def getTicket(String accessToken)
{
URL url = new URL("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi")
def params = "ACCESS_TOKEN=" + URLEncoder.encode(accessToken, 'UTF-8')
HttpURLConnection connection = (HttpURLConnection) url.openConnection()
connection.setDoOutput(true)
connection.setRequestMethod("POST")
connection.outputStream.withWriter { Writer writer -> writer.write params }
def response = connection.inputStream.withReader { Reader reader -> reader.text }
def ticket = JSON.parse(response).getAt("ticket")
return ticket
}
注:jsapi_ticket的有效期为7200秒,由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,所以必须在自己的服务全局缓存jsapi_ticket值
三、生成signature签名
签名生成规则:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分)。对所有待签名参数按照字段名的ASCII 码从小到大排序后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。
def wxGetConfigParams()
{
def access_token = getAccessToken()
def jsapi_ticket = getTicket(access_token)
def nonceStr = UUID.randomUUID().toString()
def time = (System.currentTimeMillis() / 1000).toString()
def timestamp = time.substring(0, time.lastIndexOf("."))
def url = request.getRequestURL()
def signature = getSignature(jsapi_ticket, nonceStr, timestamp, url.toString())
// TODO
// 将access_token、jsapi_ticket缓存到全局变量中
// 将signature、nonceStr、timestamp带回到页面
}
def getSignature(String jsapi_ticket, String nonce_str, String timestamp, String url)
{
def string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str + "×tamp=" + timestamp + "&url=" + url
MessageDigest crypt = MessageDigest.getInstance("SHA-1")
crypt.reset()
crypt.update(string1.getBytes("UTF-8"))
byteToHex(crypt.digest())
}
def byteToHex(final byte[] hash)
{
Formatter formatter = new Formatter()
for (byte b :hash)
{
formatter.format("%02x", b)
}
formatter.toString()
}
注:
(1)签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同
(2)签名用的url必须是调用JS接口页面的完整URL
(3)处于安全考虑,开发者必须在服务器实现签名的逻辑
分享到:
相关推荐
1. **微信JSSDK**:JSSDK提供了多种功能接口,包括获取微信用户基本信息、分享、扫一扫、支付、地理位置、摇一摇等。通过在网页中引入JSSDK的JS库,并配置好对应的接口权限,可以实现丰富的交互体验。 2. **PHP后端...
jsApiList属性是用户需要使用的微信JSSDK接口列表,当开发者需要使用某个接口时,需要在列表中声明,否则无法调用该接口。如果调用的接口没有在jsApiList中声明,微信会报错提示未授权。 当以上配置都正确无误后,...
总结来说,ASP版的微信JSSDK实现涉及到的步骤包括获取access_token和jsapi_ticket,生成签名,配置JSSDK,以及调用相应的接口实现具体功能。虽然微信官方没有提供ASP版本的SDK,但通过以上步骤,开发者可以自行为ASP...
创建了WxInitController,提供了初始化微信JSSDK配置信息的接口。 处理获取分享URL的请求,并调用服务层方法来初始化微信JSSDK配置。 3.微信服务层: WxService负责业务逻辑处理,包括获取微信AccessToken、...
微信jssdk的使用依赖于微信客户端的签名验证,而微信客户端会检测调用页面的域名是否与配置的合法域名一致。在iframe中使用jssdk,可能不会通过这种合法域名的校验,因为它被视为一个嵌入页面,而非微信客户端直接...
最近做公众号网页开发,使用微信 jssdk 页面签名时 IOS 中一直报错,这才刚开始就被这只拦路虎拦住了,报错如下: 然而 Android 和开发者工具中好得很,没有任何问题: 既然提示 签名非法 ,那就是签名有问题咯,...
jsapi_ticket是用于签名生成,确保微信JSSDK的安全性。同样,获取到的ticket也会存储到数据库中,且在过期前有效。 这两个函数的逻辑如下: - `getAccessToken()`:向`https://api.weixin.qq.com/cgi-bin/token`...
3. **生成签名**:使用 jsapi_ticket、nonceStr(随机字符串)、当前时间戳以及需要在页面加载时调用的 JSSDK 接口列表,按照特定规则拼接成字符串并进行加密,生成 signature。 4. **配置 JSSDK**:将生成的 ...
2. **初始化JSSDK**:在网页中引入微信JSSDK的JS文件,并通过`wx.config()`方法配置必要的参数,如appID、timestamp、nonceStr、signature等,这些参数都需要通过服务器动态获取,以防止被篡改。 3. **支付接口调用...
4. **生成签名(Signature)**:微信JSSDK要求每个页面加载时,必须提供一个由当前URL、nonceStr(随机字符串)、timestamp(时间戳)、jsapi_ticket(JSAPI Ticket)生成的签名,用于安全验证。 5. **配置JSSDK**:...
这个标识随后会传递给前端,前端通过微信JSSDK将标识转化为一个支付按钮,用户点击按钮后,微信支付H5页面弹出,用户确认支付信息并完成支付。 实现这两种支付功能,都需要在`lib/WxPayConfig`配置微信账户的相关...
3. **JSAPI支付**:适用于网页端支付,开发者需要在前端页面上调用微信JSAPI,利用prepay_id生成支付签名,然后由微信JSSDK处理支付逻辑。用户点击支付按钮后,会弹出微信支付确认界面,完成支付。 4. **支付结果...
开发者需要根据这些参数,按照微信官方指定的规则来生成签名。 关键步骤包括: 1. 确认签名算法正确。可以使用微信提供的校验工具进行测试,地址为:***。 2. 签名的生成规则包括以下要素: - jsapi_ticket:...
6. **微信JSSDK配置接口**:在使用任何JS接口之前,必须先通过`wx.config`进行配置,提供必要的AppID、Timestamp、NonceStr、Signature等参数,确保安全。 7. **微信消息推送接口**:通过`wx.showOptionSheet`或`wx...
最后,需要提供签名sign,这是按照微信的签名生成算法计算得到的值。 在进行接口调用时,我们需要指定URL地址,即***。在某些情况下,调用该接口可能需要证书,因此,如果需要,应当准备好客户端证书。 关于请求...
微信JS-SDK(JavaScript SDK)是微信开放平台提供的一套API接口,允许开发者在网页上集成微信的功能,如分享、支付、地理位置等。在使用这些功能时,必须进行签名验证,确保请求的安全性。本文将详细讲解微信JS-SDK...
2. **预支付订单生成**:调用微信接口生成预支付订单,这个过程中会包含商品信息、金额、回调URL等数据。 3. **订单签名**:为了保证数据安全,需要对请求参数进行签名,防止数据被篡改。 4. **调用微信支付SDK**:...
- 在HTML页面中,引入微信JSSDK(`http://res.wx.qq.com/open/js/jweixin-1.6.0.js`或最新版本),初始化JSSDK并设置config参数,包括`appId`、`timestamp`、`nonceStr`、`signature`、`jsApiList`等。 - `...
这通常涉及到JavaScript与ASP后端的交互,以及微信JSSDK的使用。 7. **错误处理和日志记录**:在实现微信支付接口时,错误处理和日志记录是必不可少的部分,ASP代码应能够捕获异常,记录详细的错误信息,以便于调试...
主要实现生成JS API 、Native的package签名包和Native响应的XML格式数据。注释都标上了各方法的用意。由于package包签名,略复杂,这个要自己多花时间去对应去看和log出文件来一一对比!当然只要你用上教程的类,...