ui做交互式网站吗,辽阳网站建设58,国际网站建设标准,郑州网站推广排名前言类似于Android集成支付----微信支付总结与封装(可以查看本人另外一篇文章)#xff0c;本文对支付宝支付进行一个总结与封装。相比于微信支付#xff0c;支付宝支付没有那么多坑。集成支付宝支付SDK这里只是简要介绍#xff0c;重点解说有坑的地方#xff0c;具体参考官…前言类似于Android集成支付----微信支付总结与封装(可以查看本人另外一篇文章)本文对支付宝支付进行一个总结与封装。相比于微信支付支付宝支付没有那么多坑。集成支付宝支付SDK这里只是简要介绍重点解说有坑的地方具体参考官方文档官方文档百度一下就有了。1.导入SDK支付宝支付导入SDK只需要导入一个jar包相信这个对于懂Android开发的同学不成问题。2.修改Manifest、混淆等这些内容照着官方文档复制粘贴即可支付宝整体来说还是很人性化的并没有很多坑。不像微信支付文档里有一些歧义。支付宝支付开发步骤相信大家通过官方文档可以很轻松的集成支付宝支付SDK下面我们就直接进入正题。1.OrderInfo的获取(签名过程)orderInfo的获取用官方的话来说是签名过程。支付宝官方明确建议这个过程要放在服务端来做只需要返回给客户端一个orderInfo字符串即可。V}VE}{S6K5ME9PQ{($ZMG7.png如果是放在服务端那么我们就不用过多关心只作为一个从服务端请求的字符串即可。然而在实际开发中OrderInfo也有可能放在客户端来做比如我们的服务端就是这样的让先请求一个接口返回给我这么点信息然后让我自己组装OrderInfo也就是自己签名日了狗了。Paste_Image.png具体的签名过程可以参考官方文档、官方demo当然还可以看我自己封装的代码。github在下面。2.调起支付宝APP这个地方非常简单直接复制官方文档提供的代码即可Runnable payRunnable new Runnable() {//要在子线程Overridepublic void run() {PayTask alipay new PayTask(RechargeActivity.this);Map result alipay.payV2(orderInfo, true);//这里的orderInfo就是上面说的orderInfoMessage msg new Message();msg.what SDK_PAY_FLAG;msg.obj result;mHandler.sendMessage(msg);}};Thread payThread new Thread(payRunnable);payThread.start();3.支付结果的处理这里也同样简单只需要在mHandler中处理即可private Handler mHandler new Handler() {public void handleMessage(Message msg) {AliPayResult payResult new AliPayResult((Map) msg.obj);switch (payResult.getResultStatus()) {case 9000:GMToastUtil.showToast(支付成功);break;case 8000:GMToastUtil.showToast(正在处理中);break;case 4000:GMToastUtil.showToast(订单支付失败);break;case 5000:GMToastUtil.showToast(重复请求);break;case 6001:GMToastUtil.showToast(已取消支付);break;case 6002:GMToastUtil.showToast(网络连接出错);break;case 6004:GMToastUtil.showToast(正在处理中);break;default:GMToastUtil.showToast(支付失败);break;}}};签名问题这里有一个问题还是有必要说一下的。支付宝支付签名有两种如下图RSA2与RSA这里支付宝官方推荐RSA2但也不排除有人会用RSA。比如我们的服务端开发人员非要用RSA很不理解。Paste_Image.png支付宝提供了签名工具自己操作生成一个公钥和一个私钥这里的公钥全名是”应用公钥“如上图。私钥自己留着在获取orderInfo(签名过程)处使用。公钥上传到上图位置要用RSA2就上传到RSA2位置反之你懂的。公钥上传后支付宝开放平台会自动生成一个支付宝公钥注意区分”应用公钥“和”支付宝公钥“。这里的支付宝公钥是给服务端用的服务端在异步回调时验签。支付宝支付的封装支付宝同样不涉及很多业务逻辑完全可以封装成工具类以便下次使用。封装后的使用非常简单如下代码详细代码可以看我的github地址在文末。//签名在客户端findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View view) {//假设已经从服务端获取必要数据MyALipayUtils.ALiPayBuilder builder new MyALipayUtils.ALiPayBuilder();builder.setAppid(123).setRsa(456)//根据情况设置Rsa2与Rsa.setMoney(0.01)//单位时分.setTitle(支付测试).setOrderTradeId(487456)//从服务端获取.setNotifyUrl(fdsfasdf)//从服务端获取.build().toALiPay(MainActivity.this);}});//签名在服务端findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View view) {//假设已从服务端获取orderInfoString orderInfo ;MyALipayUtils.ALiPayBuilder builder new MyALipayUtils.ALiPayBuilder();builder.build().toALiPay(MainActivity.this, orderInfo);}});补充直接运行demo,点击签名在客户端会出现以下错误。碰到这个错误不要惊慌。image.png只需要将setRsa(私钥)这里的私钥换成正确的私钥就OK了。也就是下图这里image.png私钥分两种两种有什么区别私钥怎么获取私钥生后怎么配置等这些问题都可以在官方文档中找到。