集成流程(AS)
- 添加依赖
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
- 添加回调类(WXPayEntryActivity),实现
IWXAPIEventHandler
接口并重写onNewIntent
方法
具体代码如下:
class WXPayEntryActivity : BaseActivity(), IWXAPIEventHandler {
private lateinit var api: IWXAPI
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//注册API
api = WXAPIFactory.createWXAPI(this, PayUtil.WX_APP_ID)
api.registerApp(PayUtil.WX_APP_ID)
api.handleIntent(intent, this)
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
setIntent(intent)
api.handleIntent(intent, this)
}
override fun onResp(p0: BaseResp?) {
if (p0?.type == ConstantsAPI.COMMAND_PAY_BY_WX) {
if (p0.errCode == 0) {
//成功处理
} else {
//失败处理
}
finish()
}
}
override fun onReq(p0: BaseReq?) {
}
- 从demo中拷入
AppRegister
public class AppRegister extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final IWXAPI api = WXAPIFactory.createWXAPI(context, null);
api.registerApp(PayUtil.WX_APP_ID);
}
}
- 在
AndroidManifest.xml
中注册AppRegister
和WXPayEntryActivity
<activity
android:name=".wxapi.WXPayEntryActivity"
android:launchMode="singleTask"
android:exported="true"
android:screenOrientation="portrait" />
<receiver
android:name=".receiver.AppRegister"
android:permission="com.tencent.mm.plugin.permission.SEND" >
<intent-filter>
<action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" />
</intent-filter>
</receiver>
- 调用支付代码(PaySign为后台获取的数据类)
val api = WXAPIFactory.createWXAPI(context, null, true)
api.registerApp(WX_APP_ID)
val request = PayReq()
request.apply {
appId = WX_APP_ID
partnerId = WX_PARTNER_ID
prepayId = paySign.prepayid
packageValue = paySign.packageValue
nonceStr = paySign.nonceStr
timeStamp = paySign.timestamp
sign = paySign.sign
}
val checkArgs = request.checkArgs()
val sendReq = api.sendReq(request)
Log.e("PayUtil", "checkArgs$checkArgs")
Log.e("PayUtil", "sendReq$sendReq")
踩坑记录
- 坑1
WXPayEntryActivity必须处于包名+wxapi
路径下,如com.example.hello.wxapi.WXPayEntryActivity
- 坑2(这个也不算坑 需要注意一下)
在微信开放平台填的包名和签名必须和当前测试的环境一致
不打包直接run用的as默认签名文件(keystore),打包之后安装用的是你自己的签名文件, 然后根据开放平台的生成规则生成对应的签名填入即可
- 坑3
AndroidManifest.xml
中,WXPayEntryActivity
一定要加上exported="true"
,否则该类不会被微信调用 - 坑4
在回调入口onResp
方法中,BaseResp
的errStr
属性极大可能为空,其他的值也有可能,如果你直接取出来用的话,大概率的会报错,而且这个问题极易被忽视
总结
做什么都需要细心点,暂时就发现这几个问题,和支付宝比起来确实不少 =。=
如果能帮到大家肯定是最好的啦~
网友评论