Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
php
/
miniprogrem-webview
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
741e47a4
authored
Jul 25, 2020
by
doszhang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dos
parent
8daa8fc6
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
178 additions
and
0 deletions
+178
-0
Application/Home/Controller/IndexController.class.php
+3
-0
Application/Home/View/default/layout.tpl
+63
-0
Public/config.php
+112
-0
No files found.
Application/Home/Controller/IndexController.class.php
View file @
741e47a4
...
...
@@ -21,4 +21,6 @@ class IndexController extends Controller
{
$this
->
display
();
}
}
\ No newline at end of file
Application/Home/View/default/layout.tpl
View file @
741e47a4
...
...
@@ -117,8 +117,70 @@
wx
.
onMenuShareAppMessage
(
wxFriendData
);
wx
.
onMenuShareTimeline
(
wxTimelineData
);
});
</script>
<script
src=
"http://res.wx.qq.com/open/js/jweixin-1.2.0.js"
></script>
<script
type=
"text/javascript"
>
$
(
function
(){
var
returnData
=
false
;
$
.
ajax
({
type
:
"get"
,
url
:
'https://miniprogrem-webview.izhida.cn/config.php'
,
data
:
[],
async
:
false
,
success
:
function
(
data
,
textStatus
,
jqXHR
){
returnData
=
data
;
//console.log(returnData);
}
});
//end ajax
var
returnData
=
eval
(
'('
+
returnData
+
')'
);
console
.
log
(
returnData
);
var
appId
=
returnData
.
appId
;
var
timestamp
=
returnData
.
timestamp
;
var
nonceStr
=
returnData
.
nonceStr
;
var
signature
=
returnData
.
signature
;
wx
.
config
({
debug
:
true
,
//调试阶段建议开启
appId
:
appId
,
timestamp
:
timestamp
,
nonceStr
:
nonceStr
,
signature
:
signature
,
jsApiList
:
[
/*
* 所有要调用的 API 都要加到这个列表中
* 这里以图像接口为例
*/
"chooseImage"
,
"previewImage"
,
"uploadImage"
,
"downloadImage"
,
"scanQRCode"
]
});
wx
.
ready
(
function
()
{
//alert(3);
wx
.
checkJsApi
({
jsApiList
:
[
'scanQRCode'
,
'previewImage'
],
success
:
function
(
res
)
{
}
});
$
(
"img"
).
click
(
function
(){
var
url
=
$
(
this
).
attr
(
"src"
);
wx
.
previewImage
({
current
:
url
,
// 当前显示图片的http链接
urls
:
[
url
]
// 需要预览的图片http链接列表
});
});
});
wx
.
error
(
function
(
res
){
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
console
.
log
(
res
);
});
});
</script>
</body>
</html>
\ No newline at end of file
Public/config.php
0 → 100644
View file @
741e47a4
<?php
date_default_timezone_set
(
"Asia/Shanghai"
);
$jssdk
=
new
Jssdk
();
$signPackage
=
$jssdk
->
getSignPackage
();
echo
json_encode
(
$signPackage
);
exit
;
class
Jssdk
{
private
$_CI
;
private
$appId
;
private
$appSecret
;
public
function
__construct
(
$appId
=
'wxa0229c3cc82d5dce'
,
$appSecret
=
'a6b68d6750c0fdb037e0d9de33f73c35'
)
{
$this
->
appId
=
$appId
;
$this
->
appSecret
=
$appSecret
;
}
public
function
getSignPackage
()
{
$jsapiTicket
=
$this
->
getJsApiTicket
();
// 注意 URL 一定要动态获取,不能 hardcode.
$protocol
=
(
!
empty
(
$_SERVER
[
'HTTPS'
])
&&
$_SERVER
[
'HTTPS'
]
!==
'off'
||
$_SERVER
[
'SERVER_PORT'
]
==
443
)
?
"https://"
:
"http://"
;
$url
=
"
$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]
"
;
$timestamp
=
time
();
$nonceStr
=
$this
->
createNonceStr
();
// 这里参数的顺序要按照 key 值 ASCII 码升序排序
$string
=
"jsapi_ticket=
$jsapiTicket
&noncestr=
$nonceStr
×tamp=
$timestamp
&url=
$url
"
;
$signature
=
sha1
(
$string
);
$signPackage
=
array
(
"appId"
=>
$this
->
appId
,
"nonceStr"
=>
$nonceStr
,
"timestamp"
=>
$timestamp
,
"url"
=>
$url
,
"signature"
=>
$signature
,
"rawString"
=>
$string
,
'jsapiTicket'
=>
$jsapiTicket
,
);
return
$signPackage
;
}
private
function
createNonceStr
(
$length
=
16
)
{
$chars
=
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
;
$str
=
""
;
for
(
$i
=
0
;
$i
<
$length
;
$i
++
)
{
$str
.=
substr
(
$chars
,
mt_rand
(
0
,
strlen
(
$chars
)
-
1
),
1
);
}
return
$str
;
}
private
function
getJsApiTicket
()
{
// jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
$data
=
$this
->
get_php_file
(
"jsapi_ticket"
);
//echo $data['expire_time'].'------'.time();
//print_r($data);exit;
if
(
!
isset
(
$data
[
'jsapi_ticket'
])
||
(
isset
(
$data
[
'expire_time'
])
&&
$data
[
'expire_time'
]
<
time
()))
{
//echo 1111;
$accessToken
=
$this
->
getAccessToken
();
// 如果是企业号用以下 URL 获取 ticket
// $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
$url
=
"https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=
$accessToken
"
;
//echo $url;
$res
=
json_decode
(
$this
->
httpGet
(
$url
),
true
);
$ticket
=
isset
(
$res
[
'ticket'
])
?
$res
[
'ticket'
]
:
false
;
if
(
$ticket
)
{
$data
[
'expire_time'
]
=
time
()
+
7160
;
$data
[
'token_value'
]
=
$ticket
;
$this
->
set_php_file
(
"jsapi_ticket"
,
$data
);
}
}
else
{
//echo 22222;
$ticket
=
$data
[
'jsapi_ticket'
];
}
return
$ticket
;
}
public
function
getAccessToken
()
{
// access_token 应该全局存储与更新,以下代码以写入到文件中做示例
$data
=
$this
->
get_php_file
(
"access_token"
);
if
(
!
isset
(
$data
[
'access_token'
])
||
(
isset
(
$data
[
'expire_time'
])
&&
$data
[
'expire_time'
]
<
time
()))
{
// 如果是企业号用以下URL获取access_token
// $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
$url
=
"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=
$this->appId
&secret=
$this->appSecret
"
;
$res
=
json_decode
(
$this
->
httpGet
(
$url
));
//var_dump($res);exit;
$access_token
=
$res
->
access_token
;
if
(
$access_token
)
{
$data
[
'expire_time'
]
=
time
()
+
7160
;
$data
[
'token_value'
]
=
$access_token
;
$this
->
set_php_file
(
"access_token"
,
$data
);
}
}
else
{
$access_token
=
$data
[
'access_token'
];
}
return
$access_token
;
}
private
function
httpGet
(
$url
)
{
$curl
=
curl_init
();
curl_setopt
(
$curl
,
CURLOPT_RETURNTRANSFER
,
true
);
curl_setopt
(
$curl
,
CURLOPT_TIMEOUT
,
500
);
// 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
// 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
curl_setopt
(
$curl
,
CURLOPT_SSL_VERIFYPEER
,
0
);
curl_setopt
(
$curl
,
CURLOPT_SSL_VERIFYHOST
,
0
);
curl_setopt
(
$curl
,
CURLOPT_URL
,
$url
);
$res
=
curl_exec
(
$curl
);
curl_close
(
$curl
);
return
$res
;
}
private
function
get_php_file
(
$token_name
)
{
if
(
file_exists
(
$token_name
))
return
false
;
return
json_decode
(
file_get_contents
(
$token_name
),
true
);
}
private
function
set_php_file
(
$token_name
,
$data
)
{
$fp
=
fopen
(
$token_name
,
"w"
);
fwrite
(
$fp
,
"<?php exit();?>"
.
json_encode
(
$data
));
fclose
(
$fp
);
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment