情景 :Android 在集成友盟微信分享、微信登录后,继续集成微信支付
关键的依赖:
dependencies {
compile files('libs/SocialSDK_WeiXin_Full.jar')
}
微信支付流程:服务端组织生成订单信息提交到微信--->微信生成预支付订单(包括签名)返回到服务端--->服务端对签名进行二次签名--->客户端请求服务端获取预支付订单参数--->客户端向微信提交参数信息调起微信支付的方法----->微信支付成功后回调返回客户端—->客户端处理成功后的逻辑
下面直接说Android客户端业务逻辑:
一、客户端提交信息到服务器统一下单
public void placeAnOrder(String theurl) { RequestParams requestParams = new RequestParams(theurl); requestParams.addBodyParameter("id", id); requestParams.addBodyParameter("mobile", mobile); requestParams.addBodyParameter("name", name); requestParams.addBodyParameter("address", address); x.http().post(requestParams, new Callback.CommonCallback<String>() { @Override public void onSuccess(String result) { Log.e("Tag_OrderSuccessful", "订单生成!"); //服务器返回临时订单相关参数 //向微信提交订单进行支付 toWXPay(); } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); }二、相关配置参数传递给微信,调取支付
private void toWXPay() {
IWXAPI iwxapi = WXAPIFactory.createWXAPI(this, null); //初始化微信apiiwxapi.registerApp("******"); //注册appid appid可以在开发平台获取
Runnable payRunnable = new Runnable() { //这里注意要放在子线程
@Override
public void run() {
PayReq request = new PayReq(); //调起微信APP的对象
//下面是设置必要的参数,也就是前面说的参数,这几个参数从何而来请看上面说明
request.appId = "*******";
request.partnerId = "******";
request.prepayId = "******";
request.packageValue = "Sign=WXPay";
request.nonceStr = "******";
request.timeStamp = "******";
request.sign = "******";
iwxapi.sendReq(request);//发送调起微信的请求
}
};
Thread payThread = new Thread(payRunnable);
payThread.start();
}三、支付成功后回调
在 wxapi 包下建立 类 WXPayEntryActivity用于处理支付后的回调逻辑
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler { private IWXAPI api; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.pay_result); api = WXAPIFactory.createWXAPI(this, "******"); 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) { int code = resp.errCode; if (code == 0){ //支付成功后的逻辑处理 }else if (code == -2){ //用户取消 MyToast.showToast(WXPayEntryActivity.this,"支付取消").show(); }else if (code == -1){ //错误 MyToast.showToast(WXPayEntryActivity.this,"支付错误").show(); } finish(); } } }好了,完成!