2018-07-10 23:01:04 Allence_z 阅读数 5893
  • 微信公众号开发8-营销开发-微信开发php

    微信公众平台开发之营销开发是子恒老师《微信公众平台开发》视频教程的第8部。详细讲解了用php开发微信,对微信公众平台中的营销功能开发。内容包含获取微信短网址,生成推广二维码,生成推广海报等等。欢迎反馈,微信/QQ:68183131

    11411 人正在学习 去看看 秦子恒
因项目需要,需在微信浏览器中获取实时位置。使用微信jweixin-1.2.0.js初始化时(wx.config)需要签名、appID,URL等参数,本文将讲解测试环境下,初始化各项测试数据的生成。如:公众号的测试appID,appSecret,域名的配置,签名生成等。进而使用微信获取位置接口获取位置。本方案适用后台服务没开发出之前测试使用,后台服务完成后即可通过后台接口获取签名。对于微信开发测试域名及页面配置可做统一参考。

详细步骤如下:

1、登录微信公众号平台-》开发者工具-》公众平台测试帐号
通过绑定测试者微信号,成功后在公众号测试账号页面下会有测试的appID,appSecret。在页面下配置域名,测试环境下可使用内网ip,如下:


2、获取token:通过微信验证接口页面获取token。token有过期时间2小时,所以一般会在后台处理,鉴于本次为本地调试,先用临时的token。微信端获取token如下(https://mp.weixin.qq.com/debug),根据页面中需要的参数填写,在下面的返回结果中拿到token。如取到的token为${access_token}


3、获取ticket:拿到token后还需要获取ticket。浏览器中直接调用微信接口,传入步骤2中拿到的access_token,获取ticket,如果成功,浏览器返回${ticket}

4.生成签名:根据第3步的ticket,
5.页面中调用,
1)引用weixin sdk,

2)调用微信接口如下:
wx.config({
	 debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
	appId: 'wxa167eea6f229d66a', // 必填,公众号的唯一标识
	timestamp: '1531224610', // 必填,生成签名的时间戳
	nonceStr: 'Wm3WZYTPz0wzccnN', // 必填,生成签名的随机串
	signature: 'e694e9fef46acac77c5647940314bb4cd094d5af',// 必填,签名
	 jsApiList: [
	    'getLocation',	//获取地理位置
	    'onMenuShareAppMessage',	//分享给朋友
	    'onMenuShareTimeline'	//分享到朋友圈
	 ] // 必填,需要使用的JS接口列表
	});
	wx.ready(function(){
	    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
	   console.log('请求成功');
	setInterval(function(){
            //请求位置
	    wx.getLocation({
		type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
		success: function (res) {
			console.log(res);
			// var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
			// var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
			// var speed = res.speed; // 速度,以米/每秒计
			// var accuracy = res.accuracy; // 位置精度
			//调用当前位置初始化方法
			// fmp.GPSlocation.initLocateInfo(res);
		}
	    });
    },3000);
});
wx.error(function(error){
	console.log('请求失败');
});
6.发布该测试页面,地址为:
http://192.168.1.236/demo.html
7.微信中访问该页面,正常返回GPS经纬度坐标。如下图所示:

至此,即可在微信中根据位置接口对接地图导航啦,基于之前有开发微信经验,这次配置起来比较顺利,存档一下。

2019-03-12 13:03:28 hjflyblue 阅读数 2544
  • 微信公众号开发8-营销开发-微信开发php

    微信公众平台开发之营销开发是子恒老师《微信公众平台开发》视频教程的第8部。详细讲解了用php开发微信,对微信公众平台中的营销功能开发。内容包含获取微信短网址,生成推广二维码,生成推广海报等等。欢迎反馈,微信/QQ:68183131

    11411 人正在学习 去看看 秦子恒
  • 说明

应用签名:用于对当前应用进行二次身份校验,开发者可以使用签名生成工具直接从安装当前应用的手机中获取。应用签名由开发者签名该应用的keystore文件决定

注意:需要取md5码

  • 方法1

(1)到微信开发平台,下载签名生成工具,Android资源下载签名生成工具

(2)把你的app安装到手机,并安装签名生成工具

(3)打开工具,输入包名,如图

  • 方法2

使用keytool命令:keytool -list -v -keystore your.keystore

 

2017-03-09 20:19:38 github_2011 阅读数 49724
  • 微信公众号开发8-营销开发-微信开发php

    微信公众平台开发之营销开发是子恒老师《微信公众平台开发》视频教程的第8部。详细讲解了用php开发微信,对微信公众平台中的营销功能开发。内容包含获取微信短网址,生成推广二维码,生成推广海报等等。欢迎反馈,微信/QQ:68183131

    11411 人正在学习 去看看 秦子恒


在微信开放平台创建移动应用时上图大家都遇到过,这里的应用签名是什么呢?

这里介绍说可以通过签名生成工具在已安装当前应用的手机中获取,(待会获取测试一下)我们先搞明白它是什么,这里提到了该应用签名由开发者签名该应用的keystore文件决定。

接下来我们便来探究一下这个应用签名是什么

思路:

1.创建一个keystore文件

2.创建一个Android应用

3.使用keystore文件签名该应用得到签名apk

4.使用签名生成工具查看该应用的签名

我们下面开始一步步执行

1.生成keystore文件

在自己电脑jdk的安装目录bin文件夹内打开dos命令行(cmd命令打开cd到bin目录也可以),输入如下命令:

keytool -genkey -alias qj_test -keyalg RSA -validity 10000 -keystore qj_test.keystore
具体操作如下图:

这时我们发现在我们的bin文件夹内多了一个qj_test.keystore文件,它就是我们生成的keystore文件


接下来我们在命令行输入如下命令:

keytool -list -v -keystore qj_test.keystore
输入密钥库口令:123456之后得到详细的keystore输出信息如下:

这里大家明显看到我把MD5值给框起来了,跟它有关系吗?想知道答案继续往下看吧…

2.创建一个简单的android项目

项目的包名为:com.qj.keystoretest ,包名符合规范可以随便命名,因为后面会用到,故在此处标出(如何创建项目略)

3.使用keystore文件签名该应用得到签名apk

我们的android应用已经创建好了,现在如何使用我们的keystore文件签名我们的应用呢






app-release.apk便是我们使用自己生成的keystore文件签名生成的apk文件

先把该apk装到手机中,就剩最后一步啦!

4.使用签名生成工具查看该应用的签名

签名生成工具下载(微信开发平台)

签名生成工具下载(新浪微博开放平台)

任意下载一个(是一个apk文件)安装手机后运行:



很显然两个工具生成的签名是相同的,因为签名是由我们的keystore文件决定的,从新浪签名获取工具的名字其实也不难发现,签名应该和MD5有关

签名生成工具生成的签名:add1944573e750774d84c04148c720a0

keystore文件中的MD5值:AD:D1:94:45:73:E7:50:77:4D:84:C0:41:48:C7:20:A0

对比发现:MD5值去掉两两之间的 " : " ,并将大写改为小写之后,奇迹出现了! 你会发现它和签名生成工具生成的签名一模一样。

总结:微信开放平台Android应用签名的本质便是我们签名文件keystore的MD5值


相关知识点:

我们创建自己的keystore,利用keystore生成签名apk文中已经介绍了,如果想要在每次运行调试应用的时候也用该keystore文件生成apk,

请参考:Android studio 如何指定使用自己生成的keystore调试



2014-10-16 11:33:28 waner321 阅读数 370
  • 微信公众号开发8-营销开发-微信开发php

    微信公众平台开发之营销开发是子恒老师《微信公众平台开发》视频教程的第8部。详细讲解了用php开发微信,对微信公众平台中的营销功能开发。内容包含获取微信短网址,生成推广二维码,生成推广海报等等。欢迎反馈,微信/QQ:68183131

    11411 人正在学习 去看看 秦子恒
微信需要验证应用签名,所以要使用分享的话需要先在微信开发者平台配置应用签名.如果不知道自己应用签名是多少,可以在微信开发者平台的资源中心-资源下载-Android资源下载里面下载签名生成工具,然后使用该工具查看自己的应用签名,然后在管理中心-修改应用中设置应用的签名.
2017-01-03 10:47:02 ws1836300 阅读数 8670
  • 微信公众号开发8-营销开发-微信开发php

    微信公众平台开发之营销开发是子恒老师《微信公众平台开发》视频教程的第8部。详细讲解了用php开发微信,对微信公众平台中的营销功能开发。内容包含获取微信短网址,生成推广二维码,生成推广海报等等。欢迎反馈,微信/QQ:68183131

    11411 人正在学习 去看看 秦子恒

参考链接:http://blog.csdn.net/xinluqishi123/article/details/52234002

微信支付第一次成功,其它支付不成功,可能的原因有:

1:订单号重复,这个重新生成一个订单号就可以了。

2:项目包名不对(包名必须与微信开发者平台上的一致,详情见参考链接)。

3:APP的应用签名不对,这个着重讲一下哈(在这里我被坑了一个大跟头,请大家尽量避免)。

 事情原委:

         我的Android APP有两个版本:第一版,第二版(第二版在第一版的基础上改了一些功能和配置)。

        开始做第一版的时候出于懒惰,就直接把以前的APP包的签名填写在了微信开放平台-- 对应的应用下面,也就是应用的包名是正确的,而签名不正确,如下图


(为了个人隐私,涂掉了一些字母)

这样的做的结果就是:你的APP调用微信支付,第一次是可以支付成功的(参考帖子里说可能支付不成功,实际上第一次支付是成功的),然后再调用微信支付就不行了。删除原来的微信,重新下载一个微信,然后调起支付,也是第一次成功,然后再也无法调起了(如果你的微信预付单是OK的,而且返回的预付单结果也是SUCCESSS。但是就是无法调起微信,那原因就是这个该死的签名有问题)。后来看了这个参考帖子,恍然间大了个悟,修改了微信开放平台Android端应用签名。这下第一版就OK了,支付成功,万事大吉。

       后来,悲剧开始了,我修改了eclipse的Android SDK 配置,修改了项目 .project文件里的 项目名(<projectDescription> <name>项目名***</name>),还修改了Androidmainfest.xm里mainActivity的启动方式。理论上都不影响微信支付功能,但是第二版运行后却无法调起微信支付了!我了个去!百思不得其解的我把代码恢复到了以前的版本,可还是无法调用成功。我删除了微信,然后重新下载了一下,然后支付,发现还是只有第一次可以调用。

那么是不是签名不对哪?我手机下载并运行了一下第一版的apk文件,发现第一版的apk支付完全没问题,只有第二版的apk支付不成功。

是不是签名生成的不对?可是第一版调用支付是没问题的,第二版app的包名和第一版是一样的。死马当活马医,我重新用微信的签名生成工具生成了一下app的签名,戏剧性的一幕出现了,第二版的签名和第一版是不一样的!这也太TM操蛋了!

如图:

安装了第一版APK后,用微信签名生成工具生成的签名是:cbf******028(这是一个MD5加密的字符串):



安装了第二版APK后,用微信签名生成工具生成的签名是938******b22:


(吐槽一下,微信早期的签名生成工具就是一坨shit,这一长串字符无法复制,需要手敲)

那么,是不是签名生成工具版本太老了呢?

 好吧,我下载了最新版的签名工具重新操作了一遍

 安装了第一版APK后,用微信签名生成工具生成的签名还是:cbf******028:


安装了第二版APK后,用微信签名生成工具生成的签名还是938******b22:


(最新版的终于有拷贝字符串的功能了)

   通过上图,大家可以发现,一样的APP包名 的确会生成不同的 应用签名。也就是讲,如果要生成唯一的签名,微信除了判断包名(一般应用的包名是唯一的)之外,还对应用的其它设置进行了判断。

  那么到底还判断了什么呢?

看其官网的提示:


很显然,除了应用的包名之外,微信还通过编译的keystore生成该MD5签名字符串。

但是,我的APP在生成APK文件时并没有设置keystore,也就是讲,第一版第二版的.apk文件都是使用相同的默认设置,无论默认设置有木有使用keystore,由于配置的环境相同,APP应用包名也相同,所以其签名也应该是一致的。(关于keystore的生成和支付的关系,可以参考:http://www.xadamai.com/APPzixun/211.html)

Android 手机目录里面的文件或者文件名是唯一的,那么第一版第二版app的包名真的是一致的吗?

我们看一下这个应用包名:

第一版APP 输出的的包名为:com.example.hpappchange-1

on path: DexPathList[[zip file "/mnt/asec/com.example.hpappchange-1/pkg.apk"],nativeLibraryDirectories=[/mnt/asec/com.example.hpappchange-2/lib, /vendor/lib, /system/lib, /data/datalib]]

第二版APP 输出的的包名为:com.example.hpappchange-2

on path: DexPathList[[zip file "/mnt/asec/com.example.hpappchange-2/pkg.apk"],nativeLibraryDirectories=[/mnt/asec/com.example.hpappchange-2/lib, /vendor/lib, /system/lib, /data/datalib]]

*显然包名不一致,为什么呢?

      一般这种问题可能是资源路径不对,或者R文件没有更新。总之就是一些不容易发现的各种小问题。与其去找这些无聊 的问题,不如重新做一个,或者点击Eclipse最上方菜单的 project > clean试一下。我们先不纠结这个。
*由上边截图可以看到,微信的签名生成工具对同一包名的应用生成的签名是不一致的,造成不一致的原因可能就是

引起第一版文件包名(com.example.hpappchange-1)和第二版的文件包名(com.example.hpappchange-2)不一致的原因。为什么会签名不一致呢?

还有一个可能原因就是打包的apk的签名是由jarsigner和keytool生成的,然而通过adb install安装的apk文件则会自动签上debug权限,两种的RSA散列不同所以会出现这样的问题。之所以说可能是因为我的第一版第二版APP都是安装的apk包,不存在安装途径不同导致加密不同的问题。当然我希望是我的设置有问题,不然的话,使用微信的签名工具造成的困扰就太大了。

(注:APK签名步骤分为两步,首先通过keytool生成用来签名的 xxx.keystore,再用jarsigner签名apk文件)

(RSA散列是一种加密方式,或称为RSA公钥加密算法,与DES(被AES取代了) ,AES等   都是一些主流的加密方式)

(参考链接:

http://www.tttabc.com/android/keytool-keystore-jarsigner-apk.htm

http://hhuleaves.iteye.com/blog/1387721

http://www.cnblogs.com/linn/p/3784363.html)

4:eclipse 缺少对应的  Android SDK版本(这个原因很小)

例如: <uses-sdk
        android:minSdkVersion="8"              这是支持的最小版本

        android:targetSdkVersion="16" />    需要修改targetSdkVersion 为支持的版本


由于本人同时在搞ios开发,所以没时间对这个问题刨根问底,希望小伙伴们尽量避免,如有了解详情者,请留言告知,不胜感激!!!

微信开发流程

阅读数 680

没有更多推荐了,返回首页