微信支付 android4.4,Android集成微信支付

我之前集成过Ping++这种第三方的支付,但没有单单针对微信官方的支付集成过,这次做遇到很多坑,记录下。

微信支付的过程:

首先在微信开放平台上申请AppID,在开放平台的应用管理中将你的应用启用支付功能,这是前提。交互过程是服务端根据商品名称价格等信息向微信的sdk请求生成一个prepayid,给app提供一个接口,在app带着商品信息调用这个接口时,将prepayid返回给app,然后app用这个prepayid调用本地的sdk,唤起微信支付页面,后面的过程基本都是微信sdk去处理了,我们只需要在WXPayEntryActivity中处理支付的回调方法即可。

除了prepayid外,还需要其他一些数据,服务端也要返回到app,这些字段的具体含义在官方文档上可以查看。

JSONObject prapay = new JSONObject(data);

weChatPay.setAppid(prapay.getString("appid"));

weChatPay.setNoncestr(prapay.getString("noncestr"));

weChatPay.setPackageValue(prapay.getString("package"));

weChatPay.setPartnerid(prapay.getString("partnerid"));

weChatPay.setPrepayid(prapay.getString("prepayid"));

weChatPay.setSign(prapay.getString("sign"));

weChatPay.setTimestamp(prapay.getString("timestamp"));

weChatPay.setTrade_no(prapay.getString("trade_no"));

我这里是将这些信息封装起来了,拿到信息之后,就要向微信sdk服务器发送支付请求了。

private void sendRequestToWechat(WeChatPay weChatPay) {

api = WXAPIFactory.createWXAPI(this, weChatPay.getAppid());

api.registerApp(weChatPay.getAppid());

PayReq request = new PayReq();

request.appId = weChatPay.getAppid();

request.partnerId = weChatPay.getPartnerid();

request.prepayId = weChatPay.getPrepayid();

request.packageValue = weChatPay.getPackageValue();

request.nonceStr = weChatPay.getNoncestr();

request.timeStamp = weChatPay.getTimestamp();

request.sign = weChatPay.getSign();

api.sendReq(request);

}

这样就调起了微信支付页面,支付完成后的回调是在WXPayEntryActivity中,在onResp方法中根据返回的结果码来判断支付结果:

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {

private static final String TAG = "WXPayEntryActivity";

private IWXAPI api;

@Override public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//setContentView(R.layout.pay_result);

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) {

Log.d(TAG, "-------------" + req.getType());

}

@Override public void onResp(BaseResp resp) {

Log.d(TAG, "微信支付回调:---------" + resp.errCode);

if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {

if (resp.errCode == 0) {

LogUtil.d(TAG, "支付成功");

} else if (resp.errCode == -1) {

ToastBlack.showText(this, "支付失败:" + String.valueOf(resp.errStr), false);

} else if (resp.errCode == -2) {

ToastBlack.showText(this, "取消支付", false);

}

finish();

}

}

}

另外还需要在AndroidManifest中配置activity:

android:name=".wxapi.WXPayEntryActivity"

android:configChanges="keyboardHidden|orientation|screenSize"

android:exported="true"

android:screenOrientation="portrait"

android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

需要注意的是,如果你的应用之前有集成过第三方的微信分享,那么久不需要导入libammsdk.jar这个jar包了,否则会报如下错误: Error:(10, 8) 错误: WXEntryActivity不是抽象的, 并且未覆盖IWXAPIEventHandler中的抽象方法onResp(BaseResp)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值