首页
工具导航
友情链接
关于
Search
1
layui+php多文件列表,多图上传,包含表单修改,可适用于laravel框架和tp框架
3,689 阅读
2
设置邮箱头像方法,gravatar头像设置
2,612 阅读
3
关于本地larvael项目部署到服务器报错Whoops, looks like something went wrong.的问题
2,611 阅读
4
百度工具DNS无法解析IP
1,783 阅读
5
在复制codepen代码时踩得坑,three.js实现的特效
1,653 阅读
东扯西扯
网站建站
SEO优化
公众号开发
登录
Search
标签搜索
php
css
laravel
宝塔面板
jQuery
mysql
js
vscode
layui
thinkphp
多图上传
插件
navicat
gravatar头像
轻量应用服务器
seo
html
腾讯云
微信支付
redis
EzraYes
累计撰写
104
篇文章
累计收到
10
条评论
首页
栏目
东扯西扯
网站建站
SEO优化
公众号开发
页面
工具导航
友情链接
关于
搜索到
104
篇与
Ezra
的结果
2021-06-16
PHP微信扫码支付V3接口开发过程!!坑很多更新中
最近公司又一个项目需要微信扫码支付,之前没做过这种东西所以我先去看了文档,先说明一下本人只是一个菜鸟,遇事直接百度的那种,于是这次我像往常一样打开百度搜索微信扫码支付。此时我发现了一丝不对劲,怎么百度搜到的文档和微信官方的文档不一样呢?一个是用xml传递参数一个是用json传递参数,这一下给我搞蒙了,于是我去微信开放社区问了问,结果是微信支付有V2和V3之分,有没有V1我不清楚,用xml传参的是V2用json传参的是V3。建议我用V3,不过这个看个人喜好,也有人说V2更好。但是对比了两个文档后我还是选择了V3,因为文档看起来要传的参数少。。。。。。(只是看起来)首先贴个文档: 微信支付-开发者文档 然后在贴个图这个图是业务流程图自己看看理解,因为是扫码支付所以我需要用户下单后获取code_url然后使用code_url来生成二维码看起来很简单是吧,然后这个是文档中给出的参数{ "mchid": "1900006XXX", "out_trade_no": "native12177525012014070332333", "appid": "wxdace645e0bc2cXXX", "description": "Image形象店-深圳腾大-QQ公仔", "notify_url": "https://weixin.qq.com/", "amount": { "total": 1, "currency": "CNY" } }看起来也很少,但是如果我按照文档中写得发出请求呢?答案是会报错: 400 "Http头缺少Accept或User-Agent" ,ok,因为我在写这块代码的时候公众号并没有申请下来,所以我觉得很正常,但是后来一想不对劲,没申请下来应该报的是 appid和mch_id不匹配 才对啊,于是我在请求里又加了accept和user-agent,然后报 401 Http头Authorization值格式错误,请参考《微信支付商户REST API签名规则》 我当时直接黑人问号,这是个什么东西啊?于是我又去微信开发社区问,结果是V3接口在调用的时候需要签名。好家伙刚说完你V3接口简单,结果你偷摸藏了个规则关于签名的文档在这: 签名生成 要签名就必须要申请证书,方法在上面这个文档里,写得更详细,下载好证书之后保存好,之后就可以进行我们的开发了接下来我就直接上代码了public function xiadan(Request $request){//测试下单哦,根据需要自己改 $data=[]; $data['mchid']=''; $data['out_trade_no']='pai1234567'; $data['appid']=''; $data['description']='商品描述:测试用'; $data['notify_url']='';//通知地址 $data['amount']['total']=1;//订单总金额,单位为分。 $data['amount']['currency']='CNY'; $url="https://api.mch.weixin.qq.com/v3/pay/transactions/native"; $data_string=json_encode($data); $qianming=$this->qianming('POST',$url,$data_string); $code=$this->http_post_data($url,$data_string,$qianming); // dd($qianming); return $code; // return json_encode($data); } public function qianming($http_method,$url,$body){ // Authorization: <schema> <token> //获取HTTP请求的方法(GET,POST,PUT等)$http_method //获取请求的绝对URL $url_parts = parse_url($url); $canonical_url = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : "")); //时间戳 $timestamp=time(); //生成随机串 $nonce=$this->createNoncestr(); $message = $http_method."\n". $canonical_url."\n". $timestamp."\n". $nonce."\n". $body."\n"; $mch_private_key=$this->getPrivateKey(); openssl_sign($message, $raw_sign, $mch_private_key, 'sha256WithRSAEncryption'); $sign = base64_encode($raw_sign);//计算签名 $schema = 'WECHATPAY2-SHA256-RSA2048'; //serial_no为商户证书序列号 $serial_no = '你商户证书的序列号'; $merchant_id = $this->mch_id; $token = sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"', $merchant_id, $nonce, $timestamp, $serial_no, $sign); $msg['schema']=$schema; $msg['token']=$token; return $msg['schema'].' '.$token;; } /** * 作用:产生随机字符串,不长于32位 */ public function createNoncestr( $length = 32 ) { $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; $str =""; for ( $i = 0; $i < $length; $i++ ) { $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1); } return $str; } //查看证书序列号 public static function getCertificate($filepath="apiclient_cert.pem") {//改成自己的地址哦 // return file_get_contents($filepath);die; $str = openssl_x509_parse(file_get_contents($filepath)); return $str['serialNumberHex']; // return openssl_x509_read(file_get_contents($filepath)); } //获取私钥 public static function getPrivateKey($filepath="apiclient_key.pem") {//改成自己的地址哦 $private_key=openssl_get_privatekey(file_get_contents($filepath)); return $private_key; } /** * 发送数据 */ public function http_post_data($url,$data_string,$qianming) { $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', 'Accept:*/*', 'Authorization:' ."$qianming", 'Content-Type: application/json; charset=utf-8', 'Content-Length: ' . strlen($data_string)) ); ob_start(); curl_exec($ch); $return_content = ob_get_contents(); ob_end_clean(); $return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); return array($return_code, $return_content); }这样起码报错是 appid和mch_id不匹配 了,之后可能有更新,但感觉悬哈哈
2021年06月16日
669 阅读
0 评论
0 点赞
2021-06-13
chrome谷歌浏览器:您使用的是不受支持的命令行标记:--extensions-on-chrome-urls
前几天安装插件的时候,改的,然后忘了怎么改回去,记录一下在地址栏输入chrome://flags禁用Extensions on chrome:// URLs网址下的扩展程序,选择 Disabled
2021年06月13日
1,054 阅读
0 评论
0 点赞
2021-06-08
一键生成渐变色
选好颜色后自动生成渐变色代码,用来做网页的背景颜色非常好用,非常高大上 https://mycolor.space/ background-image: linear-gradient(to right, #f7d2d2, #edc2d1, #dbb6d5, #beadda, #94a7db);
2021年06月08日
393 阅读
0 评论
0 点赞
2021-06-07
larvael去除html标签并显示前几个字
一个在网站套版的时候非常实用的 {{ str_limit(strip_tags($item->content),80,'...') }}
2021年06月07日
253 阅读
0 评论
0 点赞
2021-06-07
微信网页应用开发扫码登录和小程序通过unionid打通账号(更新中)
首先微信网页应用开发需要去微信开放平台去注册,而小程序则需要去微信公众平台注册,这时候要注意虽然我们想做账号打通将两个东西用一个微信号就可以登录,但是注册微信开放平台和注册微信公众平台的注册邮箱却不能一样,我们只需要保持这两个东西的主体一样就可以了.如图,这就是微信公平台里的样子,此时我们将要打通账号的微信小程序添加进来首先扫码登录参照文档 微信开放平台开发文档第一步请求code https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html参数是否必须说明appid是应用唯一标识redirect_uri是请使用urlEncode对链接进行处理response_type是应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_loginscope是应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_loginstate否用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验因为我是网页移动开发所以以我为例, appid 就填你网站应用的appid, redirect_uri 这里有点坑很容易报redirect_uri参数错误,除了你的域名不是授权回调域以外还有可能是因为redirect_uri需要做urlEncode处理,百度一下urlEncode将你的地址处理了就好了,此外还有很多人说不加http或https,这个看情况我做的时候就是没有带http所以报错了建议都试试。后边三个参数一般不用管默认的就行,不过还是要看具体的开发情况第二步通过code获取到access_token https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code参数是否必须说明appid是应用唯一标识secret是应用密钥AppSecret,在微信开放平台提交应用审核通过后获得code是第一步获取的codegrant_type是填authorization_code这样我们就可以获取到unionid了,unionid在之后的打通账号中非常重要然后可以根据openid和access_token进一步获取用户信息https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID{ "openid":"OPENID", "nickname":"NICKNAME", "sex":1, "province":"PROVINCE", "city":"CITY", "country":"COUNTRY", "headimgurl": "https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0", "privilege":[ "PRIVILEGE1", "PRIVILEGE2" ], "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL" }小程序部分 参考文档 首先小程序调起登录接口生成code返回给后台,然后返回给后台,后台再向微信请求到openid,unionid需要小程序绑定到微信开放平台,否则是获取不到的
2021年06月07日
196 阅读
0 评论
0 点赞
1
...
11
12
13
...
21