@Override protected void onDestroy() { super.onDestroy(); // 清理当前的activity引用 BCPay.clear(); // 使用微信的,在initWechatPay的activity结束时detach BCPay.detachWechat(); // 使用百度支付的,在activity结束时detach BCPay.detachBaiduPay(); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_shopping_cart); // 推荐在主Activity或application里的onCreate函数中初始化BeeCloud. BeeCloud.setSandbox(true); BeeCloud.setAppIdAndSecret( "c5d1cba1-5e3f-4ba0-941d-9b0a371fe719", "4bfdd244-574d-4bf3-b034-0c751ed34fee"); // 如果用到微信支付,在用到微信支付的Activity的onCreate函数里调用以下函数. // 第二个参数需要换成你自己的微信AppID. String initInfo = BCPay.initWechatPay(ShoppingCartActivity.this, "wxf1aa465362b4c8f1"); if (initInfo != null) { Toast.makeText(this, "微信初始化失败:" + initInfo, Toast.LENGTH_LONG).show(); } // 如果使用PayPal需要在支付之前设置client id和应用secret // BCPay.PAYPAL_PAY_TYPE.SANDBOX用于测试,BCPay.PAYPAL_PAY_TYPE.LIVE用于生产环境 // 最后一个参数表示是否在paypal支付页面显示收货地址,如果地址不合法有可能造成无法支付 BCPay.initPayPal( "AdvoLpBgtfNrLx9NCzLtIOR4ShGxwzStnAw8Ja-fytk5iy_-Wfy7hARHcRIr6eWksLoutuXfksy7ge9U", "EJP-yD2lHnf4SSIpZr2xGYTjRbzqBe2jBWnex3rL17Nz7yN1pjMeVYP1bi8HvzQaWbmmVo3oKPlzgivW", BCPay.PAYPAL_PAY_TYPE.SANDBOX, Boolean.FALSE); payMethod = (ListView) this.findViewById(R.id.payMethod); Integer[] payIcons = new Integer[] { R.drawable.wechat, R.drawable.alipay, R.drawable.unionpay, R.drawable.beecloud_logo, R.drawable.baidupay, R.drawable.paypal, R.drawable.rss, R.drawable.wechat, R.drawable.wechat, R.drawable.scan }; final String[] payNames = new String[] { "微信支付", "支付宝支付", "银联在线", "BeeCloud支付", "百度钱包", "PayPal支付", "订阅支付", "微信WAP支付", "BeeCloud微信支付", "二维码支付" }; String[] payDescs = new String[] { "使用微信支付,以人民币CNY计费", "使用支付宝支付,以人民币CNY计费", "使用银联在线支付,以人民币CNY计费", "通过BeeCloud快捷支付", "使用百度钱包支付,以人民币CNY计费", "使用PayPal支付,以美元USD计费", "通过订阅计划,自动缴费", "使用微信WAP支付,以人民币CNY计费", "使用BeeCloud专用微信支付,以人民币CNY计费", "通过扫描二维码支付" }; PayMethodListItem adapter = new PayMethodListItem(this, payIcons, payNames, payDescs); payMethod.setAdapter(adapter); // 如果调起支付太慢, 可以在这里开启动画, 以progressdialog为例 loadingDialog = new ProgressDialog(ShoppingCartActivity.this); loadingDialog.setMessage("处理中,请稍候..."); loadingDialog.setIndeterminate(true); loadingDialog.setCancelable(true); payMethod.setOnItemClickListener( new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { switch (position) { case 0: // 微信 loadingDialog.show(); // 对于微信支付, 手机内存太小会有OutOfResourcesException造成的卡顿, 以致无法完成支付 // 这个是微信自身存在的问题 Map<String, String> mapOptional = new HashMap<String, String>(); mapOptional.put("testkey1", "测试value值1"); if (BCPay.isWXAppInstalledAndSupported() && BCPay.isWXPaySupported()) { BCPay.getInstance(ShoppingCartActivity.this) .reqWXPaymentAsync( "安卓微信支付测试", // 订单标题 1, // 订单金额(分) BillUtils.genBillNum(), // 订单流水号 mapOptional, // 扩展参数(可以null) bcCallback); // 支付完成后回调入口 } else { Toast.makeText( ShoppingCartActivity.this, "您尚未安装微信或者安装的微信版本不支持", Toast.LENGTH_LONG) .show(); loadingDialog.dismiss(); } break; case 1: // 支付宝支付 loadingDialog.show(); mapOptional = new HashMap<String, String>(); mapOptional.put("客户端", "安卓"); mapOptional.put("consumptioncode", "consumptionCode"); mapOptional.put("money", "2"); BCPay.getInstance(ShoppingCartActivity.this) .reqAliPaymentAsync( "安卓支付宝支付测试", 1, BillUtils.genBillNum(), mapOptional, bcCallback); break; case 2: // 银联支付 loadingDialog.show(); /* 你可以通过如下方法发起支付,或者PayParams的方式 BCPay.getInstance(ShoppingCartActivity.this).reqUnionPaymentAsync("银联支付测试", 1, BillUtils.genBillNum(), null, bcCallback);*/ BCPay.PayParams payParam = new BCPay.PayParams(); payParam.channelType = BCReqParams.BCChannelTypes.UN_APP; // 商品描述, 32个字节内, 汉字以2个字节计 payParam.billTitle = "安卓银联支付测试"; // 支付金额,以分为单位,必须是正整数 payParam.billTotalFee = 10; // 商户自定义订单号 payParam.billNum = BillUtils.genBillNum(); // 设置本次订单的异步回调地址(慎重设置,以免造成丢单),不设置则使用设置的webhook地址 payParam.notifyUrl = "https://apihz.beecloud.cn/1/pay/webhook/receiver/c5d1cba1-5e3f-4ba0-941d-9b0a371fe719"; BCPay.getInstance(ShoppingCartActivity.this).reqPaymentAsync(payParam, bcCallback); break; case 3: // BeeCloud支付 loadingDialog.show(); BCPay.PayParams bcPayParam = new BCPay.PayParams(); bcPayParam.channelType = BCReqParams.BCChannelTypes.BC_APP; // 商品描述, 32个字节内, 汉字以2个字节计 bcPayParam.billTitle = "安卓BC_APP支付测试"; // 支付金额,以分为单位,必须是正整数,BC_APP最低1元 bcPayParam.billTotalFee = 100; // 商户自定义订单号 bcPayParam.billNum = BillUtils.genBillNum(); BCPay.getInstance(ShoppingCartActivity.this) .reqPaymentAsync(bcPayParam, bcCallback); break; case 4: // 通过百度钱包支付 loadingDialog.show(); mapOptional = new HashMap<>(); mapOptional.put("goods desc", "商品详细描述"); Map<String, String> analysis; // 通过创建PayParam的方式发起支付 // 你也可以通过reqBaiduPaymentAsync的方式支付 // BCPay.PayParam payParam = new BCPay.PayParams(); /* * 支付渠道,此处以百度钱包为例,实际支付允许 * BCReqParams.BCChannelTypes.WX_APP, * BCReqParams.BCChannelTypes.ALI_APP, * BCReqParams.BCChannelTypes.UN_APP, * BCReqParams.BCChannelTypes.BD_APP, * BCReqParams.BCChannelTypes.PAYPAL_SANDBOX, * BCReqParams.BCChannelTypes.PAYPAL_LIVE */ payParam.channelType = BCReqParams.BCChannelTypes.BD_APP; // 商品描述, 32个字节内, 汉字以2个字节计 payParam.billTitle = "安卓Baidu钱包支付测试"; // 支付金额,以分为单位,必须是正整数 payParam.billTotalFee = 1; // 商户自定义订单号 payParam.billNum = BillUtils.genBillNum(); // 订单超时时间,以秒为单位,建议不小于360,可以不设置 payParam.billTimeout = 360; // 扩展参数,可以传入任意数量的key/value对来补充对业务逻辑的需求,可以不设置 payParam.optional = mapOptional; // 扩展参数,用于后期分析,目前只支持key为category的分类分析,可以不设置 analysis = new HashMap<String, String>(); analysis.put("category", "BD"); payParam.analysis = analysis; BCPay.getInstance(ShoppingCartActivity.this).reqPaymentAsync(payParam, bcCallback); break; case 5: // 通过PayPal支付 /* 此处返回的是PayPal客户端返回的信息, 请调用syncPayPalPayment获取校验结果,该方法会同时将支付订单同步到BeeCloud服务器 */ loadingDialog.show(); isPayPal = true; HashMap<String, String> hashMapOptional = new HashMap<String, String>(); hashMapOptional.put("PayPal key1", "PayPal value1"); hashMapOptional.put("PayPal key2", "PayPal value2"); BCPay.getInstance(ShoppingCartActivity.this) .reqPayPalPaymentAsync( "PayPal payment test", // bill title 1, // bill amount(use cents) "USD", // bill currency hashMapOptional, // optional info bcCallback); break; case 6: { // 订阅支付 /* 进入订阅支付的activity */ Intent intent = new Intent(ShoppingCartActivity.this, SubscribeActivity.class); startActivity(intent); break; } case 7: { payParam = new BCPay.PayParams(); // 微信Wap payParam.channelType = BCReqParams.BCChannelTypes.BC_WX_WAP; // 商品描述, 32个字节内, 汉字以2个字节计 payParam.billTitle = "安卓WX_WAP支付测试"; // 支付金额,以分为单位,必须是正整数 payParam.billTotalFee = 1; // 商户自定义订单号 payParam.billNum = BillUtils.genBillNum(); BCPay.getInstance(ShoppingCartActivity.this) .reqPaymentAsync(payParam, bcCallback); break; } case 8: { payParam = new BCPay.PayParams(); // 微信APP payParam.channelType = BCReqParams.BCChannelTypes.BC_WX_APP; // 商品描述, 32个字节内, 汉字以2个字节计 payParam.billTitle = "安卓BC_WX_APP支付测试"; // 支付金额,以分为单位,必须是正整数 payParam.billTotalFee = 1; // 商户自定义订单号 payParam.billNum = BillUtils.genBillNum(); BCPay.getInstance(ShoppingCartActivity.this) .reqPaymentAsync(payParam, bcCallback); break; } case 9: { Intent intent = new Intent(ShoppingCartActivity.this, QRCodeEntryActivity.class); startActivity(intent); } } } }); btnQueryOrders = (Button) findViewById(R.id.btnQueryOrders); btnQueryOrders.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(ShoppingCartActivity.this, OrdersEntryActivity.class); startActivity(intent); } }); }