• 支付宝集成


    支付宝集成流程:
     
    支付宝接入步骤需要以下四步:
    1:创建应用并获取appid,
    2:配置秘钥
    3:集成并配置SDK
    4:调用接口
    一:创建应用并获取appid
     
    1:首先需要去创建应用,地址如下:
     
     
    2:点击创建按钮:跳转到如下界面:
    二:配置秘钥
    步骤如下:
    1: 在应用环境里面,点击设置应用公钥,出现如下界面:
     
     
    2:点击获取验证码:
    填入验证码以后点击确定按钮,跳转如下界面:
    点击支付宝生成器,进行下载以及安装,跳转如下界面:点击生成公钥,出现如下界面:
     
    复制公钥到如下窗口:
     
     
    点击验证公钥正确性,跳转到如下界面进行验证:
     
    点击下载按钮,去下载签名工具,通过私钥对 json进行加密:运行起来,到如下界面:
     
     
    将私钥复制到左边框,效果如下:
     
     
    点击生成签名,效果如下:
     
     
    复制加密文本到如下界面进行验证:
     
     
    点击验证按钮,验证是不是解密成功
     
    如果跳转到公钥页面,说明验证成功,点击保存按钮,保存公钥
     
    以上步骤应用公钥设置成功.
     
    三::集成并配置SDK
     
    接入移动支付需要集成两个SDK,客户端SDK需要集成在商户自己的APP中,用于唤起支付宝APP并发送交易数据,并在支付宝APP返回商户APP时获得支付结果。服务端SDK需要商户集成在自己的服务端系统中,用于协助解析并验证客户端同步返回的支付结果和异步通知
     
    按照支付宝开发文档将SDK集成完成以后,
     
    1:首先需要通过如下方法生成 orderParam,
     
    方法如下:
     
    Map<String, String> params = OrderInfoUtil2_0.buildOrderParamMap(APPID);
    String orderParam = OrderInfoUtil2_0.buildOrderParam(params);
     
    生成的时候需要的参数包括如下:
    1: appid
    2:biz_content :订单信息
    3:charset 编码格式
    4:method 方法
    5:sign_type 加密方式
    6:timestamp 时间戳
    7:version :当前版本
     
    通过以上7个参数生成 orderParam 代码如下:
    public static Map<String, String> buildOrderParamMap(String app_id) {
    Map<String, String> keyValues = new HashMap<String, String>();
     
    keyValues.put("app_id", app_id);
     
    keyValues.put("biz_content", "{"timeout_express":"30m","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.01","subject":"1","body":"我是测试数据","out_trade_no":"" + getOutTradeNo() + ""}");
     
    keyValues.put("charset", "utf-8");
     
    keyValues.put("method", "alipay.trade.app.pay");
     
    keyValues.put("sign_type", "RSA");
     
    keyValues.put("timestamp", "2016-07-29 16:55:53");
     
    keyValues.put("version", "1.0");
     
    return keyValues;
    }
     
    2:通过服务器提供的接口 去获取 orderInfo 这个参数,
    提交参数为:
    params,orderParam
    服务器需要执行的代码如下:
    String sign = OrderInfoUtil2_0.getSign(params, RSA_PRIVATE);
    final String orderInfo = orderParam + "&" + sign;
     
    orderInfo 包括以下三部分组成: appid & 私钥
     
    3:开启子线程,去调用支付宝的支付行为:具体代码如下:
     
    PayTask alipay = new PayTask(PayDemoActivity.this);
    Map<String, String> result = alipay.payV2(orderInfo, true);
     
    (1)同步执行的支付成功,会发送消息到主线程:代码如下:
     
    switch (msg.what) {
    case SDK_PAY_FLAG: {
    @SuppressWarnings("unchecked")
    PayResult payResult = new PayResult((Map<String, String>) msg.obj);
    /**
    对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
    */
    String resultInfo = payResult.getResult();// 同步返回需要验证的信息
    String resultStatus = payResult.getResultStatus();
    // 判断resultStatus 为9000则代表支付成功
    if (TextUtils.equals(resultStatus, "9000")) {
    // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
    Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
    } else {
    // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
    Toast.makeText(PayDemoActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
    }
    (2):支付成功以后,支付宝会通知我们的服务器支付成功
    (3):在同步支持成功以后,我们去调用我们服务器的接口,等待服务器返回解雇
    (4):当支付宝通知服务器支持成功以后,服务器把支付成功的结果返回我们,我们认为支付成功
     
     
     
    面试中如何讲支付宝流程:
     
    首先第一步注册获取 appid
    第二在客户端通过支付宝提供的 appid ,生成两个参数,一个叫 params,orderParam(里面包括用户的订单信息,一般讲id提交给服务器)
    第三:通过服务器提供的接口把 params,orderParam,这俩参数提交给服务器,服务器给我们返回订单信息,orderInfo,(这个东西服务器是经过非对称加密的,支付宝去解密)
    第四:通过调用支付宝提供的方法将 orderInfo,提交给支付宝,提交成功以后,支付宝会通过Hander 返回成功
    ,但是这个我们不会认为成功,在这里我们会通过一个接口去请求服务器,因为支付宝支付成功以后会通知我们的服务器,当服务器接收到支付宝支付成功以后,在这个接口将成功的订单信息返回给我们,这个时候,我们认为支付宝真正支付成功.
  • 相关阅读:
    USACO 1.1-ride
    USACO 1.1-gift1
    USACO 1.1-Friday the Thirteenth
    SQL详解(上)
    Python入门神图
    JSTL标签详解以及应用实例
    EL表达式详解及应用实例
    session应用----登录验证小案例
    各种编码问题产生原因以及解决办法---------响应编码,请求编码,URL编码
    Servlet的request应用案例
  • 原文地址:https://www.cnblogs.com/lizhanqi/p/6020667.html
Copyright © 2020-2023  润新知