Android 集成微信支付

情景 :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); //初始化微信api
iwxapi.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();

      }
   }
}
好了,完成!

猜你喜欢

转载自blog.csdn.net/qiy6010/article/details/78870818