18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 电子商务 > 微信支付,支付宝支付,银联支付——三大支付总结

微信支付,支付宝支付,银联支付——三大支付总结

时间:2023-03-14 15:06:02 | 来源:电子商务

时间:2023-03-14 15:06:02 来源:电子商务

介绍

银联支付,支付宝支付,微信支付的三大总结,之前也有写过两篇。

微信支付,支付宝支付,银联支付——三大支付总结:

http://blog.csdn.net/androidstarjack/article/details/72669394

支付宝植入总结:

android 支付宝的植入 《曾经踩过的坑》

微信支付总结:

Android 微信支付总结

备注:出于安全考虑,验签我们都是放到后台进行验签的。对于我们移动端节省了很多的劳动力。

之前有做过支付宝支付和微信支付,所以这次做起来碰到的问题很少,key申请下来之后很快就搞定了。吼吼

效果图:

微信三大支付
由于用鲁大师去截屏获取gif,鲁大师一针一针绘制图片的时候应该没做好处理,导致跳转到相应的界面出现黑屏现象。在手机上正常跳转,无黑屏现象。大家不用担心这个

****准备****:

需要以公司名义,在支付宝,微信等平台上开通公司账户并且认证,如:支付过程中需要公司的帐号和商户号。

支付宝支付

如果碰到一些坑的话,请参考我之前写过的意一篇支付宝踩坑的文章:
android 支付宝的植入 《曾经踩过的坑》
  1. 首先支付宝申请并集成支付宝SDK 这里不再详细介绍


参考文档:

https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1

    1. 获取订单信息(根据自己公司的实际情况:可以在服务端完成,也可以在本地完成)
如:
price=12.5&num=12 //价格为12.5,数量为12

    1. 客户端拿这些订单信息向服务器后台进行请求,返回支付签名信息signInfo
    2. app携带支付信息,调用支付接口请求支付宝客户端,从而调起支付界面


/** * 支付宝进行请求 * * @param signInfo */ private void payToOrderService(final String signInfo) { new Thread() { @Override public void run() { super.run(); PayTask payTask = new PayTask(MyScannerPayActivity.this); // String result = payTask.pay(signInfo, true); Map<String, String> result = payTask.payV2(signInfo, true); Message message = mHandler.obtainMessage(); message.what = SDK_PAY_FLAG; message.obj = result; mHandler.sendMessage(message); } }.start(); }
  1. 用户操作,输入密码支付,支付成功;直接返回取消支付;出现错误,支付失败;进入支付界面,但输入密码支付,支付待确认;
  2. 支付宝客户端将支付结果告诉app客户端,商户服务器通知app服务器支付结果;
  3. app客户端处理支付结果;
  4. app服务器处理支付结果。
处理结果通知:

private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case SDK_PAY_FLAG: PayResult payResult = null; try { payResult = new PayResult((Map<String, String>) msg.obj); } catch (Exception e) { e.printStackTrace(); } /** 对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。 */ String resultInfo = payResult.getResult();// 同步返回需要验证的信息 String resultStatus = payResult.getResultStatus(); // 判断resultStatus 为9000则代表支付成功 if (TextUtils.equals(resultStatus, PAY_OK)) { ActivityUtils.showActivity(MyScannerPayActivity.this, ScannerPaySuccessActivity.class); finish(); } else if (TextUtils.equals(resultStatus, PAY_FAILED)) {//------------------------->支付失败 // 该笔订单真实的支付结果,需要依赖服务端的异步通知。 Toast.makeText(MyScannerPayActivity.this, "" + payResult.getMemo(), Toast.LENGTH_LONG).show(); } else if (TextUtils.equals(resultStatus, PAY_CANCLE)) {//-------------------------->交易取消 Toast.makeText(MyScannerPayActivity.this, "" + payResult.getMemo(), Toast.LENGTH_LONG).show(); } else if (TextUtils.equals(resultStatus, PAY_NET_ERR)) {//------------------------->网络出现错误 Toast.makeText(MyScannerPayActivity.this, "" + payResult.getMemo(), Toast.LENGTH_LONG).show(); } else if (TextUtils.equals(resultStatus, PAY_WAIT_CONFIRM)) {//--------------------->交替等待 } break; } } };

银联支付

先看一下官方给我们的银联支付流程图:

大家不要被这张图片搞懵逼的了,其实很简单,这里我将其分为5小步。

结果返回

处理银联手机支付控件返回的支付结果

调用银联支付后,返回app的时候用了,看返回结果传,成功,失败,或者是什么返回。

如图所示:

最后注意在调用:

/***************************************************************** * mMode参数解释: "00" - 启动银联正式环境 "01" - 连接银联测试环境 *****************************************************************/private final String mMode = "00";注意:

tn值就是上面第三后台给的tn,给到服务器那里,
这里我这边是通过后台请求下来的,关于mMode,看第一步骤,自己改一下就行了,00开发环境,01测试环境。但是要注意,这个只是个回调接口方法。

****总感觉银联支付的SDK调用起来怪怪的,貌似回到了原始深林。****

微信支付:

微信支付总结:
http://blog.csdn.net/androidstarjack/article/details/50951941

接入流程图:



  1. 申请开发者账号
    地址:https://open.weixin.qq.com/
    进入管理中心,创建移动应用
  2. 申请支付能力
  3. 代码集成微信支付
  • 代码集成微信支付


  • HashMap<String ,String> params = getHeadMap(); params.put("appid", appID);// 微信appid,选择性上传,服务器写死亦可 params.put("money", money);// 支付金额,单位:分 params.put("goodName", goodsName);// 商品名称 params.put("productNum", String.valueOf(12));// 商品的数量- 2.app服务器调用微信“统一下单”接口,得到prePayId订单号并返回prePayId给手机客户端; 3.手机客户端使用prePayId及商品信息调起微信客户端进行支付; 3.1用户操作:输入密码进行支付;返回键取消支付;网络无连接支付失败等; 4.微信客户端回调支付结果给咱们的APP客户端; 5.微信服务器异步通知咱们公司app服务器支付结果(服务器的工作,与客户端无关)相关的支付调用代码:

    IWXAPI mWxApi = WXAPIFactory.createWXAPI(mContext, WX_APPID, true); mWxApi.registerApp(WX_APPID); /** * 请求app服务器得到的回调结果 */ @Override public void onGet(JSONObject jsonObject) { if (mWxApi != null) { PayReq req = new PayReq(); req.appId = WX_APPID;// 微信开放平台审核通过的应用APPID try { req.partnerId = jsonObject.getString("partnerid");// 微信支付分配的商户号 req.prepayId = jsonObject.getString("prepayid");// 预支付订单号,app服务器调用“统一下单”接口获取 req.nonceStr = jsonObject.getString("noncestr");// 随机字符串,不长于32位,服务器小哥会给咱生成 req.timeStamp = jsonObject.getString("timestamp");// 时间戳,app服务器小哥给出 req.packageValue = jsonObject.getString("package");// 固定值Sign=WXPay,可以直接写死,服务器返回的也是这个固定值 req.sign = jsonObject.getString("sign");// 签名,服务器小哥给出,他会根据:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3指导得到这个 } catch (JSONException e) { e.printStackTrace(); } mWxApi.sendReq(req); Log.d("发起微信支付申请"); } }

    注意事项:

    Android集成微信支付的出现-1等错误需要注意的要点

    ****reso.errCode = -1 官方的描述: -1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。****

    1.签名错误:

    2.APPID错误

    应用包名:是在APP项目配置文件AndroidManifest.xml中声明的package值,例如DEMO中的package=”com.nmm.paydemo”。

    应用签名:根据项目的应用包名和编译使用的keystore,可由签名工具生成一个32位的md5串,在调试的手机上安装签名工具后,运行可生成应用签名串,如图8.9所示,绿色串即应用签名。签名工具下载地址

    对比查看应用签名是否一致,特别注意,一般上传都是使用release版本的key所以在测试的时候就需要使用签名版的apk,普通的debug版本key是不一致的

    微信支付相关的demo地址:

    https://github.com/androidstarjack/MyWxPayTest

    以上是我之前做微信支付的时候的一些总结,今天再次拿出来供大家参考

    之前的历史文章:

    支付宝植入总结:
    android 支付宝的植入 《曾经踩过的坑》
    微信支付总结:
    Android 微信支付总结
    版权:首发于我的csdn博客:https://codegoogler.blog.csdn.net/article/details/72669394

    最后照旧安利一波我们的公众号:「终端研发部」,目前每天都会推荐一篇优质的技术相关的文章,主要分享java相关的技术与面试技巧,我们的目标是: 知道是什么,为什么,打好基础,做好每一点!这个主创技术公众号超级值得大家关注。

    关键词:支付,总结

    74
    73
    25
    news

    版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

    为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
    关闭