美文网首页Android知识常见问题解决基础
Android十八章:5分钟接入微信支付

Android十八章:5分钟接入微信支付

作者: ppjuns | 来源:发表于2016-11-01 17:33 被阅读575次

    现在app最流行微信支付,支付宝支付,都是大部分消费类型app计费方式首选。现在5分钟教你接入微信支付。

    接入前请准备好

    • 微信appid
    • 微信appkey
    • 微信商户id
    • 微信商户APIkey 需要在商户后台自定义32位key
    • 上传app的签名.jks文件 MD5值

    官网微信支付demo下载链接

    配置项目配置文件

    首先,把demo中的libammsdk.jar加入项目中libs文件夹,右击as library

    AndroidManifest.xml加入权限

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

    注册广播接收器

     <receiver
                android:name="包名.AppRegister">
                <intent-filter>
                    <action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" />
                </intent-filter>
            </receiver>
    

    注册支付结果回调actiivty ,此处activity命名规则必须是包名+wxapi.WXPayEntryActivity ,否则无法得到支付结果。

    <activity
            android:name="包名.wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop"/>
    

    在调用微信支付的activity 的intent-filter标签加上

     <data android:scheme="微信appid"/>
    

    调用支付方法

    前提,微信生成预订单prepay_id要在app服务器完成,这样子好处是客户端不保存微信appkey,商户key,商户id等信息让支付更加安全可靠。操作就是客户端把商品名称,金额提交给app服务器返回预订单。

    在调用支付方法view定义

          private  PayReq mReq
          private  IWXAPI mWxapi
        @Override
        protected void onCreate(Bundle savedInstanceState) {
               mReq=new PayReq();
               mWxapi=WXAPIFactory.createWXAPI(this,null);
    
    
    }
    
         public void pay(){
             //判断微信是否安装
             if(!isSupportPay()){
                  return;
    }
    
       //向app服务器提交商品名金额,获取预订单,商户id,加密信息,时间戳等后...
    
               mReq.appId = "appid";
              mReq.partnerId = "mch_id";
              mReq.prepayId = "prepay_id";
              mReq.packageValue = "Sign=WXPay";
              mReq.nonceStr ="nonce_str";
              mReq.timeStamp = "TimeStamp";
               mReq.sign = "signParams";
               mWxapi.registerApp("appid");
               mWxapi.sendReq(req);//拉起微信支付界面
    }
    
    private boolean isSupportPay(){
    
    
      if(mWxapi.isWXAppInstalled()&&mWxapi.isWXAppSupportAPI()){
                   return true;
        }else{
           Toast.makeText(mContext, "请安装最新版微信", Toast.LENGTH_SHORT).show();
              return false;
        }
    }
    
    
       WXPayEntryActivity.java
    
       private IWXAPI wxapi;
    
      public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
    
           @Override
        protected void onCreate(Bundle savedInstanceState) {
              wxapi = WXAPIFactory.createWXAPI(this, "wxappid");
             wxapi.handleIntent(getIntent(), this);
    
       }
        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            wxapi.handleIntent(intent, this);
      }
       @Override
        public void onReq(BaseReq req) {
            // TODO Auto-generated method stub
    
        }
    
       //微信通知app客户端
        @Override
        public void onResp(BaseResp resp) {
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
    
        switch(resp.errCode){
          case 0:
            //支付成功
            break;
          case -1:
            //未签名app
            break;
          case -2:
            //取消支付
            break;
          default:
            //支付失败
            break;
    
             }
          }
    
       }
     }
    
    

    支付相关错误码

    如果resp.errCode返回-1,此时app签名和微信open平台签名文件的md5值不一致造成,所以要确保app使用open平台相同签名文件。

    如遇到其他复杂情况可以清空微信app缓存,进行测试。

    相关文章

      网友评论

      • 简域工作室:不要调用 isWXAppSupportAPI,如果真的要判断,见这个文章吧:https://www.jianshu.com/p/ace7e34de51c
        ppjuns:@Brevent 这样子,那我去掉这个判断
        简域工作室:@ppjun君 这个倒没必要,我不相信目前有那么低的版本...
        ppjuns:@Brevent 多谢大佬斧正,我改改mWxApi.wxAppSupportAPI>= com.tencent.mm.opensdk.constants.Build.PAY_SUPPORTED_SDK_INT

      本文标题:Android十八章:5分钟接入微信支付

      本文链接:https://www.haomeiwen.com/subject/gmimuttx.html