Android微信支付开发流程
需要内容:
账号信息:appId,appKey,mchId(商户号)
libammsdk.jar包 MD5.java类
开发步骤:
1、libammsdk.jar包 MD5.java类拷入项目,将jar包AddLibrary;
2、在清单文件中:
3、在跟包名下创建wxapi包,在该包内新建WXPayEntryActivity,并实现IWXAPIEventHandler接口,在清单文件中注册,exported设置为true
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
4、创建微信广播接收器,并在清单文件注册
public classAppRegister extendsBroadcastReceiver {
@Override
public voidonReceive(Context context,Intent intent) {
finalIWXAPI api = WXAPIFactory.createWXAPI(context, null);
api.registerApp(WXPayConfig.APP_ID);
}
}
//==========================================================
5、选择商品 下单
注册微信api
// 创建PayReq对象
req =new PayReq();
// 创建IWXAPI对象
msgApi = WXAPIFactory.createWXAPI(context, null);
// 使用app_id注册app
msgApi.registerApp(WXPayConfig.APP_ID);
6、将订单信息传给服务器,服务器返回prepayId(预支付订单号,很重要)如:
getUserOrderFromServer();
7、拿到prepayId后,在客户端对订单生成签名
req.appId= WXPayConfig.APP_ID;
req.partnerId= WXPayConfig.MCH_ID;
req.prepayId= order.data.prepay_id;
req.packageValue= "Sign=WXPay";
req.nonceStr= genNonceStr();
req.timeStamp= String.valueOf(genTimeStamp());
@SuppressWarnings("deprecation")
List
signParams.add(newBasicNameValuePair("appid",req.appId));
signParams.add(newBasicNameValuePair("noncestr",req.nonceStr));
signParams.add(newBasicNameValuePair("package",req.packageValue));
signParams.add(newBasicNameValuePair("partnerid",req.partnerId));
signParams.add(newBasicNameValuePair("prepayid",req.prepayId));
signParams.add(newBasicNameValuePair("timestamp",req.timeStamp));
req.sign= genAppSign(signParams);
8、使用PayReq调起微信支付界面,开始支付
boolean open = msgApi.sendReq(req);
9、在WXPayEntryActivity中收到支付回调(此Activity可作为支付完成界面)
9.1 、onCreate方法中,注册api
api = WXAPIFactory.createWXAPI(this,WXPayConfig.APP_ID);
api.handleIntent(getIntent(), this);
9.2、在onNewIntent中
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
9.3 onResp方法中,收到支付结果(此方法在子线程中执行,若刷新UI,需回到主线程)
在
resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX
条件下
resp.errCode==0 : 支付成功
resp.errCode== -1 : 支付未完成
resp.errCode== -2 : 支付失败
10、支付成功后,可再次请求服务器是否成功,都成功,则此次支付成功完成,有一方未成功,应排查失败原因。
11、完成!
支付流程图