您的位置:首页 > 移动开发 > 微信开发

微信支付遇到的坑

2016-03-24 14:13 417 查看
1.首先,根据开发文档,申请APP_ID(至于怎么获得签名,这个下个签名工具就可以了)

获得了APP_ID之后,支付和分享都需要用到。此时分享就可以直接使用了。但是支付还需要申请。(如果此时微信分享不能使用,那就应该是签名的问题。如果微信分享可以用,支付不能用,那就应该不是签名的问题了。后续再讲签名)

2.要想使用这些功能,需要添加jar包,微信的开发文档中有下载的地方,名字是libammsdk.jar。

这个jar包需要导入到项目的libs下面,然后add 。

3.有一些开发文档中没有说明的需要注意的东西,微信确实比较坑,你如果不网上查,你很难发现的。

1).首先,你会发现,在AndroidManifest.xml下面,有下图红色部分的内容,scheme中需要写上你的key,实际,这个测了测,加不加这个内容都可以。并没有什么卵用。如果你无法调起微信支付,找不到问题的所在,正好这又没加,你可以尝试加上,看看有没有什么神奇的效果。



2).微信比较贱的地方就是,你需要加上它的支付结果接受类。示例demo中的wxapi包下的WXPayEntryActivity.java这个必须加,在里面的onResp方法中对结果进行处理,如果你实在不想用这个界面,那你就在onResp中跳转别的界面,然后瞬间finish掉这个界面。



4.然后就是需要生成订单,这个需要发送个微信的有7个字段,分别是以下的内容



APP_ID:这个是申请号的,固定不变的。

Partnerid:这个是商户号,也是申请号的,不变的

Prepayid:这个需要和微信服务器端进行交互,告诉他你要生成订单,订单金额是多少,然后服务器就返回了这个值。(随机的,每次不一样,即使你申请的金额一样)

Package:这个就写固定的值“Sign=WXPay”就可以了

Noncestr:有随机生成的算法

Timestamp:获取当前时间戳

Sign:也是随机的,根据前面的字段以某种格式生成的

其实以上的这些参数,你交由服务端生成就行了,你访问url,解析出这些字段,然后打包发给微信就可以了。

5.注册APP_ID,不注册是不行的,就按照它的步骤走就行了,APP_ID换成你的。



然后打包send发送。



此时应该就差不多了。接着就调起了微信支付界面,里面有金额,然后支付完成后,会回调WXPayEntryActivity.java的onResp()方法,对结果进行处理。

6.关于微信支付测试Demo的问题

1).你把微信支付的demo下载到本地,导入,然后执行,都没有问题,弹出支付界面,支付完成,然后我再调用,发现起不来了,一直返回-1。网上查找,发现都说是清除微信缓存就可以了(设置->应用程序->微信->清除缓存),确实可以,但是每次这样,很麻烦,归根结底,还是有原因的,那就是签名的问题。你会发现,微信支付的测试demo下面,会有一个debug.keystore。



此时,你只要设置一下,就每次都能调起支付界面了。

就拿eclipse举例,Window->Prefences->Android->Build



将红框中的Custom debug keystore设置成测试demo目录下的keystore,之后你再试试,就可以了。

2).如果你要把测试demo直接改成你的包名。先把AndroidManifest.xml吓得package改成你的,再把目录下的包名改成你的,把报错的地方在修改一下,就差不多了。然后签名打包。



3).如果的项目已经上线,执行完前面的乱七八糟的步骤之后,你需要重新签名,而且用你项目打包上线的时候所用的签名文件签名。

讲到这里,就要对小白们说明下,什么是是签名文件,怎么签名之类的。为什么要签名,这是都是我以前的疑惑,之前我也不懂,多亏了别人的悉心教导,我才懂得(大神就别听我BB了)。下面简单的说下,详细的网上也有,也许会对你有查漏补缺的帮助。

签名就是身份证,说明你的app是谁写的,所有权属于谁,如果不签名,是不允许上线,不允许被下载安装的。

项目第一次签名打包,Android Studio是选择Build->Generate signed APk,

Eclipse是选择项目右键->Android Tools ->export signed Application package,

然后都选择create new keystore。

然后根据网上艘一下啊就可以(android签名打包),一定要把帐号密码记住,要用的。

上面你是第一次打包签名。

接下来,如果你的项目已经上线,你接手这个项目,忽然让你添加微信支付,以前没有上线打包经验,你可能就会卡住,是否会有疑问,已经打包了,有签名了,为什么还要签名?

同一个项目,第一次上线,需要打包签名,之后会有一个签名文件keystore文件,这个就是签名文件,而且会有密码,alias帐号,和aliad密码,这是你第一次打包的时候,创建的,所以需要记住。

当第二次出版本了,需要修改了,又要上线,此时,仍然需要打包签名,这就是为什么在选择打包签名的时候,会有两个选项,一个是create new keystore,另一个是choose existing keystore。每次出版本,都需要用同一个,也就是第一次签名打包生成的签名文件进行签名,这样才能证明,你上传的是同一个apk,只是不同的版本而已,如果此时你create new keystore打包了,那就变成两个apk,就好比身份证换了一样。

微信支付测试的时候,也需要打包签名,否则不行,就拿android studio为例,打包的时候选择choose existing keystore,然后找到你的.keystore文件,选中,然后险些store密码,填写alias帐号和密码,



填写完之后,next,然后选择打包的apk所放置的路径,然后选择build Type,type有两个选项,一个是debug,一个是release,前者是测试,后者是上线,必须打release包才能正常的调起微信支付



Finish之后,找到apk,安装到你的手机上,进行测试吧。

Eclipse大同小异

参考博客:

Android微信支付

https://code.csdn.net/snippets/503976/#snippets503976

Android微信支付问题总结

Android微信支付彻底扫坑

android 微信sdk api调用不成功解决方案

Android Sutio签名打包应用


击支付


Android 微信支付为何现在一直点击支付后,直接跳转到支付结果的页面,支付结果返回0-1 


Android 微信支付为何现在一直点击支付后,直接跳转到支付结果的页面,支付结果返回0-1

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: