Android app支付-微信支付

上一篇文章讲解了银联的集成,这章将会讲解微信支付的集成。微信支付集成是比较简单,但大家都说会有很多坑,我集成过程中比较顺利,几乎一次过,所以分享出来,希望可以帮助到大家啦!(不说明微信支付申请过程)

一.微信开发文档下载地址:微信支付开发文档

微信Demo、jar包资源和签名工具下载链接:点击打开链接


二.微信支付的支付流程。

1.在客户端提交用户选择的产品信息,如:价格、产品名称等信息到我们的服务端。

2.我的服务端会返回一串json的字符串,我们再分别把对应的数据塞进PayReq对象中。

3.把该App注册到微信,判断当前手机是否安转微信和微信版本是否支持支付功能。

4.最终,把PayReq通过SendReq方法发送到微信。

5.在WXPayEntryActivity类里面判断支付结果。


三.微信支付的开发步骤:(在AndroidStudio中开发)

  1.把下载的libammsdk.jar添加到libs目录下。

  2.在主包名下面新建一个wxapi包,里面新建一个WXPayEntryActivity类。

  3.微信支付的APPID,该值需要去微信支付平台获取。


四.前期工作准备,开始接入代码

  1.向我们的服务端发送请求,把金额和一些订单信息传给我们的服务端。

  2.服务端会返回一串Json字符串

我使用的是retrofit和Rxjava网络请求,这是我请求成功后调用的方法。

@Override
    public void getWeiXinPaySuccess(String model) {
        try {
            JSONObject json = new JSONObject(model);
            if(null != json && !json.has("retcode") ){
                PayReq req = new PayReq();
                req.appId			= json.getString("appid");
              
                req.partnerId		= json.getString("partnerid");
                req.prepayId		= json.getString("prepayid");
                req.nonceStr		= json.getString("noncestr");
                req.timeStamp		= json.getString("timestamp");
                req.packageValue	= json.getString("package");
                req.sign			= json.getString("sign");
                req.extData			= "app data"; // optional
                // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
                toWeiXinPay(req);

            }else{
                Toast.makeText(PayMentActivity.this, json.getString("retmsg"), Toast.LENGTH_SHORT).show();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    private void toWeiXinPay(PayReq req){
        api = WXAPIFactory.createWXAPI(this, Constant.WeiXinAPPID);
        api.registerApp(Constant.WeiXinAPPID);
        if(!api.isWXAppInstalled())
        {
            NormalAlertDialog dialog = new NormalAlertDialog.Builder(PayMentActivity.this)
                    .setBoolTitle(false)
                    .setContentText("检测到手机没有安转微信")
                    .setSingleModel(true)
                    .setSingleText("确认")
                    .setHeight(0.23f)
                    .setWidth(0.65f)
                    .setSingleListener(new DialogInterface.OnSingleClickListener<NormalAlertDialog>() {
                        @Override
                        public void clickSingleButton(NormalAlertDialog dialog, View view) {
                            dialog.dismiss();
                        }
                    }).setTouchOutside(false)
                    .build();
            dialog.show();
            return;
        }
        if(!api.isWXAppSupportAPI())
        {
            NormalAlertDialog dialog = new NormalAlertDialog.Builder(PayMentActivity.this)
                    .setBoolTitle(false)
                    .setContentText("当前版本不支持支付功能")
                    .setSingleModel(true)
                    .setSingleText("确认")
                    .setHeight(0.23f)
                    .setWidth(0.65f)
                    .setSingleListener(new DialogInterface.OnSingleClickListener<NormalAlertDialog>() {
                        @Override
                        public void clickSingleButton(NormalAlertDialog dialog, View view) {
                            dialog.dismiss();
                        }
                    }).setTouchOutside(false)
                    .build();
            dialog.show();
            return;
        }
        api.sendReq(req);
    }
注意 :在向微信发送请求之前,需要把App注册到微信:api.registerApp(Constant.WeiXinAPPID),Constant.WeiXinAPPID=APPID;

  3.在调起微信支付控件后,不管成功、失败还是取消,都会调用起WXPayEntryActivity类的onResp(BaseResp resp)方法。

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
    private IWXAPI api;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wxpay_entry);
        api = WXAPIFactory.createWXAPI(this, Constant.WeiXinAPPID);
        api.handleIntent(getIntent(), this);
    }
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        api.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq baseReq) {

    }
    @Override
    public void onResp(BaseResp resp){
        if(resp!=null){
            finish();
            RxBus.$().post("WeixinPayTag", resp);

        }

    }
}

注意:因为我是不需要在这个页面显示任何东西的,所以我的布局是空的,在获得支付结果后,直接finish掉了该页面.

4.支付结果的处理

if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            if(resp.errCode==0){
               
                ToastUtil.showShortToast(PayMentActivity.this,"用户支付成功");

            }else if(resp.errCode==-2){
                ToastUtil.showShortToast(PayMentActivity.this,"用户取消了支付");
            }else{
                
           ToastUtil.showShortToast(PayMentActivity.this,"用户支付失败");

            }
        }

最后,如果需要进行测试或者使用,先要到微信平台进行签名登记,就是该项目的签名(签名可以通过微信平台的签名工具获取),如果登记的是debug版的签名,要使用debug版的Apk进行测试。如果是release版本的,则使用release版本的apk。


原创博客,转载请注明:
http://blog.csdn.NET/lgl5785592

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值