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

Android-集成微信支付以及遇到的问题浅谈

2017-09-28 18:49 453 查看
本篇文章主要记录:在项目中集成微信支付的流程以及遇到的问题的解决办法

微信支付集成

详情请看微信官方文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5

一、配置签名:



微信需要的签名是由开发者使用签名文件下的MD5值(去掉“-”大写转小写),查看MD5 值,百度下吧,微信也给了一个签名工具下载地址https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk

开发中可以选择debug下的md5。

二、项目配置:



1、在项目包名下创建,包名和activity名要完全一致,否则无法回调成功;

2、AndroidManifest.xml下添加:

<!-- WeChat sdk begin -->
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop">
<!--<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="签名"/>
</intent-filter>-->

</activity>
<!-- WeChat sdk end -->


注释部分有说要加上,签名要配置,否则支付时会返回“-1”。我项目中未遇到该情况,所以也就没加。

当然权限也要配置上,支付宝权限和微信权限是相同的,只加一个就好了.

如果微信支付成功后无法回调到app,请查看配置android:exported属性是否设置为true;

3、添加依赖:

项目app下的build.gradle下配置:微信最新API推荐以此方式集成,jar包形式也可用,不过好像微信官方对jar包说明是以后会不再维护更新

dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}


开始支付了

一、首先注册微信API:



wxApi = WXAPIFactory.createWXAPI(context, wxAppId, false);


第三个参数微信说明是“checkSignature”,(有说设置为true时,会出现支付返回-1的情况)

二、配置支付参数



wxPayReq.packageValue = "Sign=WXPay"


因为后台给的该参数是“package”,很明显安卓是无法定义该字段的。还好该值是微信固定值,所以本地就给写定了。

项目中的微信appId也是由后台传入的,也是为了安全起见。当然该值一般不会改变,也可配置在项目中。

然后就可以调起微信付钱了。。。在调起微信之前微信给出方法检查微信app的安装及版本状态,也是由于微信不支持自动转H5支付的原因,所以最好检查一下是否安装,版本情况视个人需求了(貌似如果不是最新版微信都会提示当前版本过低),惯例–代码截图:



三、处理支付回调结果:



该代码是在WXPayEntryActivity类中的

@Override
public void onResp(BaseResp resp) {...}


方法中。

到此微信支付就算完成了。下面说下在项目中遇到的问题:

相信大家在微信支付中遇到最多的就是调起微信后,直接返回-1的情况。以下是微信给的结果回调状态说明:



参数返回-1 的原因有很多,当返回-1时,看到微信给的说明后,突然有种想暴走的冲动(这tm也说得太笼统了吧!)。

but,出现-1的情况,确实是像微信给出的说明大致类似。大多数出现的原因也就是:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配。其他异常只要正常配置是很难出现的(反正我是没遇到)。

我项目中遇到的情况是appid的问题。iOS是可以用的,但android就是不行。后来才想明白因为用到了公司其他项目的appid,iOS是用的上个项目的证书,所以是可以支付的。但我的项目和公司其他项目用的签名文件是不同的,当然包名也不同。所以appid也是不一样的。

有时问题很简单,但就是很难去发现。总之就是多和相关的人员沟通,问题很快就会解决的,尽量不要一个人钻牛角。

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