分类 默认分类 下的文章

重感冒在家养病,坐在电脑前发着懵.
忽然一阵眩晕感袭来

我对这个感觉有印象,以前轻微地震的时候就是这样,感觉天摇地动像晕船

下意识伸出左手扶了一下墙。
看到桌面最左边若隐若现有个可弯折的黑色台灯。
欸?
我挪动一下脑袋改变一下观观察视角,台灯变得更清晰了。换另一个方向看,台灯变得更透明甚至不见了.
我认得这个台灯,10年前我桌面还只有2个显示器的时候,桌面这个位置就摆着它。

一下子没反应过来时怎么回事,我看向右边,墙上挂满的数码产品也时隐时现,一时变成一个空白的墙面一时又是现在的样子。

伸手想去摸一下台灯,但手和台灯重合的时候。眩晕感更厉害了。

直觉告诉我这房间和十几年前的某个时刻重叠了。
大脑飞快地转,想万一自己要穿回去了?是不是能给以前的自己留点未来的信息?什么信息有价值?留什么?怎么留?

一动脑子,感觉眩晕感和感冒症状得更厉害了。眼皮好重,快要失去意识...

用力想再睁开眼睛,发现自己躺在被窝里了,喉咙还卡着痰。抽了一下鼻涕。
看四周,还有那种眩晕感..不知道刚才的经历是真的,还是梦。

爬起来,写日志。

需要给某个安卓app的安装包做导流安装服务。谨慎如我并不想直接安装在自己的手机查看包名。找到了以下方法

*需要电脑上装有android-sdk 版本任意,不要太旧即可

进入build-tools目录, 命令行下执行

aapt dump badging [yourapp.apk]

得到相关结果

E:\android\android-sdk-windows\build-tools\19.1.0>aapt dump badging gjfz.apk
package: name='com.hicorenational.antifraud' versionCode='39' versionName='1.1.6'
sdkVersion:'21'
targetSdkVersion:'28'
uses-permission:'android.permission.READ_PHONE_NUMBERS'
uses-permission:'android.permission.READ_CALL_LOG'
uses-permission:'android.permission.READ_PHONE_STATE'
uses-permission:'android.permission.READ_CONTACTS'
uses-permission:'android.permission.VIBRATE'
uses-permission:'android.permission.ACCESS_NOTIFICATION_POLICY'
uses-permission:'android.permission.ACCESS_NETWORK_STATE'
uses-permission:'android.permission.ACCESS_WIFI_STATE'
uses-permission:'android.permission.MODIFY_AUDIO_SETTINGS'
uses-permission:'android.permission.SYSTEM_ALERT_WINDOW'
uses-permission:'android.permission.SYSTEM_OVERLAY_WINDOW'
uses-permission:'android.permission.RECEIVE_SMS'
uses-permission:'android.permission.READ_SMS'
uses-permission:'android.permission.RECORD_AUDIO'
uses-permission:'android.permission.READ_EXTERNAL_STORAGE'
uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE'
uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED'
uses-permission:'android.permission.DISABLE_KEYGUARD'
uses-permission:'android.permission.WAKE_LOCK'
uses-permission:'android.permission.BROADCAST_PACKAGE_ADDED'
uses-permission:'android.permission.BROADCAST_PACKAGE_CHANGED'
uses-permission:'android.permission.BROADCAST_PACKAGE_INSTALL'
uses-permission:'android.permission.BROADCAST_PACKAGE_REPLACED'
uses-permission:'android.permission.MOUNT_UNMOUNT_FILESYSTEMS'
uses-permission:'android.permission.WRITE_SETTINGS'
uses-permission:'android.permission.INTERNET'
uses-permission:'android.permission.CAMERA'
uses-permission:'android.permission.GET_TASKS'
uses-permission:'android.permission.READ_LOGS'
uses-permission:'android.permission.REORDER_TASKS'
uses-feature:'android.hardware.camera'
uses-feature:'android.hardware.camera.autofocus'
uses-feature:'android.hardware.camera.flash'
uses-permission:'com.hicorenational.antifraud.permission.ANTI_VIRUS'
uses-permission:'android.permission.FOREGROUND_SERVICE'
uses-permission:'android.permission.REQUEST_INSTALL_PACKAGES'
uses-permission:'com.android.browser.permission.READ_HISTORY_BOOKMARKS'
uses-permission:'android.permission.REQUEST_DELETE_PACKAGES'
uses-permission:'android.permission.ACCESS_COARSE_LOCATION'
uses-permission:'android.permission.ACCESS_FINE_LOCATION'
uses-permission:'android.permission.ACCESS_NETWORK_STATE'
uses-permission:'android.permission.ACCESS_WIFI_STATE'
uses-permission:'android.permission.CHANGE_WIFI_STATE'
uses-permission:'android.permission.INTERNET'
uses-permission:'android.permission.READ_PHONE_STATE'
uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE'
uses-permission:'android.permission.ACCESS_LOCATION_EXTRA_COMMANDS'
uses-permission:'android.permission.FOREGROUND_SERVICE'
uses-permission:'android.permission.ACCESS_BACKGROUND_LOCATION'
uses-permission:'android.permission.QUERY_ALL_PACKAGES'
uses-permission:'android.permission.READ_APN_SETTINGS'
uses-permission:'android.permission.BROADCAST_STICKY'
uses-permission:'android.permission.CHANGE_NETWORK_STATE'
uses-permission:'com.hicorenational.antifraud.permission.TMF_SHARK'
uses-feature:'android.hardware.camera2.full'
uses-permission:'com.coloros.mcs.permission.RECIEVE_MCS_MESSAGE'
uses-permission:'com.heytap.mcs.permission.RECIEVE_MCS_MESSAGE'
uses-permission:'com.vivo.notification.permission.BADGE_ICON'
uses-permission:'com.hicorenational.antifraud.permission.MIPUSH_RECEIVE'
...

话说...这开通的权限和功能清单...是不是有点多的离谱


参考 : https://www.huaweicloud.com/articles/fa2768e47170c882e48042f013f3cebd.html

回调的通知发现没有被正确处理,查看才知道<req_info>是经过加密的要自行解密

文档:
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_16&index=10

文中只有简单一句带过, 查了一下自带的 PHP SDK 也没有相关的代码

用key*对加密串B做AES-256-ECB解密(PKCS7Padding)

实现起来其实不难,就下面几行而已

define("PAY_KEY","3a6fbc07d5*********");
$hash = 'sjACArtC1yjo/WAlEnKyOcqP+avFCOCRR7Tn...AqXwmjIbonF/ECEqqs='; //密文
$strA = base64_decode($hash2);
$md5key = md5(PAY_KEY);
$raw = openssl_decrypt($strA,'AES-256-ECB',$md5key, OPENSSL_RAW_DATA); //解密的原文

解密出的原文:

<root>
<out_refund_no><![CDATA[202012281002345G4Y7R]]></out_refund_no>
<out_trade_no><![CDATA[202012281002345G4Y7R]]></out_trade_no>
<refund_account><![CDATA[REFUND_SOURCE_RECHARGE_FUNDS]]></refund_account>
<refund_fee><![CDATA[2]]></refund_fee>
<refund_id><![CDATA[50300406842020122805052137399]]></refund_id>
<refund_recv_accout><![CDATA[支付用户零钱]]></refund_recv_accout>
<refund_request_source><![CDATA[API]]></refund_request_source>
<refund_status><![CDATA[SUCCESS]]></refund_status>
<settlement_refund_fee><![CDATA[2]]></settlement_refund_fee>
<settlement_total_fee><![CDATA[2]]></settlement_total_fee>
<success_time><![CDATA[2020-12-28 22:05:57]]></success_time>
<total_fee><![CDATA[2]]></total_fee>
<transaction_id><![CDATA[4200000791202012284085971964]]></transaction_id>
</root>

不是什么难点,关键在于要给第四参数 OPENSSL_RAW_DATA 网上查到很多的方法至少前几页的都不对,要么是差最后一点要么舍近求远化简为繁。

特此备忘一下。

微信公众号开发中有会遇到使用多媒体素材的问题,例如语音、视频、图片等。不知道该说微信素材管理的设计是恶心还是谨慎,公众号后台明明有同样的功能,但是后台的图文和媒体文件素材和公众号的调用的资源是相互不互通的。如果要公众号响应脚本给用户回一个图片或视频,就必须自己实现多媒体文件的上传,换领media_id 而不能从公众号后台上传获得。

不去深究这样设计的原因,只谈解决办法。为每个管理的项目额外开发一个上传管理的程序有大费周章。今天试了下用postman直接调用接口,可行! 备忘步骤如下。

1 设置调用接口的IP白名单

公众号后台 -> 开发 -> 基本配置 -> IP白名单

把自己的IP加进去

2 GET请求获得 access_token

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

两参数从公众号后台上一步的基本配置页面获得

结果如图
QQ截图20201029173346.jpg

3 POST请求获得media_id

https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE

复制出上一步骤的access_token 替换进参数内,本次需求上传的是图片,所以type为 image

https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=38_gW19v-VusU3SHhVP4w_JvHvNSfR_XC-DazL1IYpb18SUZ3myrHM_exn1NocgtOFV8xOiLFFZL39J3YkrDMHRuCUbg2gYDlo3r5pIXKIxV-8kSJQjhVKa8LFzkDv8y7jp1bZ9Gp2xUUEddjNCZEZhCBANSN&type=image

保险起见,我在get和post参数都保留了 access_token 和 type, 并且在 post参数按API文档要求增加一个media的参数,修改类型为file,点value栏选择要上传的文件。然后提交。 成功获得 media_id 如下图

QQ截图20201029171656.jpg

参考文:

https://www.jianshu.com/p/8602d75b58ba

https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Adding_Permanent_Assets.html