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

本篇文章主要记录:在项目中集成微信支付的流程以及遇到的问题的解决办法

微信支付集成

详情请看微信官方文档: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的情况)

二、配置支付参数

WeChatOrderItem微信参数请求的Bean类

wxPayReq.packageValue = "Sign=WXPay"

因为后台给的该参数是“package”,很明显安卓是无法定义该字段的。还好该值是微信固定值,所以本地就给写定了。
项目中的微信appId也是由后台传入的,也是为了安全起见。当然该值一般不会改变,也可配置在项目中。
然后就可以调起微信付钱了。。。在调起微信之前微信给出方法检查微信app的安装及版本状态,也是由于微信不支持自动转H5支付的原因,所以最好检查一下是否安装,版本情况视个人需求了(貌似如果不是最新版微信都会提示当前版本过低),惯例–代码截图:
微信api中有该代码

三、处理支付回调结果:

支付回调处理

该代码是在WXPayEntryActivity类中的

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

方法中。

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

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

参数返回-1 的原因有很多,当返回-1时,看到微信给的说明后,突然有种想暴走的冲动(这tm也说得太笼统了吧!)。
but,出现-1的情况,确实是像微信给出的说明大致类似。大多数出现的原因也就是:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配。其他异常只要正常配置是很难出现的(反正我是没遇到)。
我项目中遇到的情况是appid的问题。iOS是可以用的,但android就是不行。后来才想明白因为用到了公司其他项目的appid,iOS是用的上个项目的证书,所以是可以支付的。但我的项目和公司其他项目用的签名文件是不同的,当然包名也不同。所以appid也是不一样的。
有时问题很简单,但就是很难去发现。总之就是多和相关的人员沟通,问题很快就会解决的,尽量不要一个人钻牛角。

==========================================end

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值