【Android】微信支付收不到onResp

起因:

接入微信支付时,看到AndroidManifest.xml中package声明为onetake,于是将WXPayEntryActivity放在了onetake包下。

结果无论如何都收不到调起支付后WXPayEntryActivity的onResp。

分析:

registerApp的Appid没写对,请求sendReq参数写错,或者是WXPayEntryActivity的位置出错。

排查:

我将微信官方SDK导入项目跑了一遍,把里面请求参数写成自己的假参数,发现仍然可以走到onResp并能调起页面。

Appid也没有问题。

最后分析是自己的 :包名.wxapi.WXPayEntryActivity 的问题。

我在手机设置里找到自己的应用程序,上面看到包名是nomo,不是ontake。

将包名改为ontake后,可以收到onResp回调。

结论:

尽管AndroidManifest.xml的package声明为onetake,但app的build.gradle里将applicationId写成了nomo,

在有applicationId的情况下,package的声明是无效的。(仅为个人理解)

 

以下为关于package和applicationId的关系:

1. 前言

  • 本文资料来源网络公开资源,并根据个人实践见解纯手打整理,如有错误请随时指出。
  • 本文主要用于个人积累及分享,文中可能引用其他技术大牛文章(仅引用链接不转载),如有侵权请告知必妥善处理。

2. applicationIdpackageName

2.1. IDEEclipse

applicationId基于gradle编译,Eclipse IDE 不存在applicationId,也不能使用它,请忽略。

2.2. IDEAndroid Studio

2.2.1 applicationId

  • 理论上来讲applicationIdandroid设备以及google play所公认的唯一标示。
  • 若未配置applicationId时,google play无法上线(据查)
  • 配置applicationId可以用作同一工程发布略有差异的不同apk,比如收费版和免费版、代码相同标示不同的渠道包等。
  • 配置方法(在appbuild.gradle中):

    • 一般配置

      android {
          ......
          defaultConfig {
              applicationId "sp.com.learncomposite"
              ......
          }
      }
    • 设置不同的applicationId配置 
      其中关于productFlavors的应用可以参考这篇文章很详细:链接,或者参考官方文档:链接1链接2

      android {
          ......
          productFlavors {
              pro {
                  applicationId = "sp.com.learncomposite.pro"
              }
              free {
                  applicationId = "sp.com.learncomposite.free"
              }
          }
      
          buildTypes {
              ......
              debug {
                  applicationIdSuffix ".debug"
              }
          }
      }
  • release打包时,在签名界面,可以选择你将要打出的包,也可以多选并同时打出: 

  • debug调试时,可以再Android studio左下角的Build Variants标签中选择当前调试的是哪个包: 

2.2.2 packageName

  • 将仅被代码(如资源文件R.java)或Manifest清单中声明(如类的包路径和packageName相同时,activityname缩写为”.xxxActivity“)使用。

2.2.3 两者纠缠的关系

  • applicationId不存在时,applicationId将默认为packageName
  • applicationId存在时,packageName仅有其本身的功能,而applicationId将作为唯一标示。

3. 在Manifest中使用${applicationId}

  • Provider在声明android:authorities(该值必须唯一)时,如前缀为写死的包名字符串,当出现需要同一工程分包、分渠道打包时,安装在同一android设备将导致 INSTALL FAILED CONFLICTING PROVIDER 的报错(使用adb安装会有提示),这时可以使用${applicationId},这将避免android:authorities值非唯一的问题。

    <provider
        android:name="xxxx.xxxx.xxx.xxxProvider"
        android:authorities="${applicationId}.xxxx"
        android:grantUriPermissions="true"
        android:exported="false"/>
  • ${applicationId}也可以用在Manifest中其他需要唯一的取值情况,这种使用方式很灵活。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 微信支付第一次可以调起。微信支付是一种方便快捷、安全可靠的移动支付方式。在Android设备上,首次调起微信支付需要进行相应的配置和设置。 首先,需要在项目的AndroidManifest.xml文件中添加微信支付的权限和配置信息。添加以下内容: ``` <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <meta-data android:name="WCHAT_APPID" android:value="微信开放平台申请的AppID"/> ``` 然后,在应用的Activity文件中,需要注册微信支付相关的广播接收器。可以通过以下代码示例进行注册: ``` public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler { private IWXAPI api; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wxpay_entry); api = WXAPIFactory.createWXAPI(this, "微信开放平台申请的AppID"); api.handleIntent(getIntent(), this); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); } @Override public void onReq(BaseReq req) { } @Override public void onResp(BaseResp resp) { if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { // 处理微信支付结果 // 可以根据resp的errCode判断支付是否成功、失败或取消 } } } ``` 在调起微信支付的时候,需要确保微信应用已安装和版本兼容,并通过以下代码示例进行支付请求: ``` PayReq request = new PayReq(); request.appId = "微信开放平台申请的AppID"; request.partnerId = "商户号"; request.prepayId = "预支付交易会话ID"; request.nonceStr = "随机字符串"; request.timeStamp = "时间戳"; request.packageValue = "扩展字段"; request.sign = "签名"; api.sendReq(request); ``` 以上是首次调起Android微信支付的相关步骤和代码示例。根据以上配置和设置,就可以成功调起微信支付功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值