Android集成微信支付

申请资质什么的一大堆东西请自行解决,点击去微信开放平台申请

应用包名:是在APP项目配置文件AndroidManifest.xml中声明的package值

应用签名:根据项目的应用包名和编译使用的keystore,可由签名工具生成一个32位的md5串,在调试的手机上安装签名工具后,运行可生成应用签名。点击下载签名工具

最终我们得到的AppID,AppSecret,PartnerID。

下面是app工程接入步骤:

引入sdk。可以下载sdk或者通过Gradle依赖

dependencies {

compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

}
dependencies {

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

}

参考app端接入流程Android部分,点击查看官方文档

注册AppID,将app注册到微信

    final IWXAPI api = WXAPIFactory.createWXAPI(context, null);
    
     api.registerApp("wxd930ea5d5a258f4f");//参数为AppID

调起支付

PayReq request = new PayReq();

request.appId = "wxd930ea5d5a258f4f";

request.partnerId = "1900000109";

request.prepayId= "1101000000140415649af9fc314aa427",;

request.packageValue = "Sign=WXPay";

request.nonceStr= "1101000000140429eb40476f8896f4c9";

request.timeStamp= "1398746574";

request.sign= "7FFECB600D7157C5AA49810D2D8F28BC2811827B";

api.sendReq(request);

以上参数信息请查看官方文档

支付回调

在包名中新建一个包,即{$包名}.wxapi 。在{$包名}.wxapi中实现类名为WXPayEntryActivity类(包名或类名不一致会造成无法回调),该类实现IWXAPIEventHandler,如下:

public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
    private final IWXAPI api=WXAPIFactory.createWXAPI(this, URL.WX_APP_ID);

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        api.handleIntent(intent, this);
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        api.handleIntent(getIntent(), this);
    }
    @Override
    public void onReq(BaseReq baseReq) {
        toastShort( "openid = " + baseReq.openId);
    }

    @Override
    public void onResp(BaseResp baseResp) {

        if (baseResp.errCode==0){
            //微信支付成功
            toastShort("支付成功");
        }else if (baseResp.errCode==-2){
            //取消支付
            toastShort("用户取消支付");
        }else {
            //支付出错
            toastShort(baseResp.errCode+baseResp.errStr);
        }
        finish();
    }

    private void toastShort( String msg) {
        Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
    }
}

回调中errCode值列表

名称描述解决方案
0成功展示成功页面
-1错误可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
-2用户取消无需处理。发生场景:用户不支付了,点击取消,返回APP。

AndroidManifest.xml 设置

添加必要的权限支持:

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

回调页配置

<activity
   android:name="net.sourceforge.simcpux.wxapi.WXPayEntryActivity"
   android:exported="true"//必须
   android:launchMode="singleTop"/>
总结遇到的坑,签名什么的,必须配置好,还有运行的时候要keystore签名打包,有时候偷懒配置debug的keystore就是正式的keystore,偶尔会出现意想不到的错误。比如我遇到的问题,api.sendReq(request)成功却未唤醒微信app,回调返回errCode是-1;反复检查了签名什么的都没错(有的也都改了),然而就是不成功。原因不在我的app,而是微信缓存的我的app注册到它的签名问题,比如keystore发生了改变,appid刚开始不正确等。清除微信缓存可以解决问题,或者干脆卸载重装微信。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值