支付宝支付相关代码

说明:
product_code参数为销售产品码,与支付宝签约的产品码名称,此参数一般为必填参数,请严格按照开放平台文档要求传递
 
示例:
1.电脑网站支付产品alipay.trade.page.pay接口中,product_code为:FAST_INSTANT_TRADE_PAY
2.手机网站支付产品alipay.trade.wap.pay接口中,product_code为:QUICK_WAP_WAY
3.当面付条码支付产品alipay.trade.pay接口中,product_code为:FACE_TO_FACE_PAYMENT
4.APP支付产品alipay.trade.app.pay接口中,product_code为:QUICK_MSECURITY_PAY
 
注意点:
1.product_code参数不得为空
2. product_code不得传错  




private AlipayClient alipayClient;



    AlipayClient getAlipayClient(){
        if(alipayClient == null){
            alipayClient = new DefaultAlipayClient(ProjectConsts.ALI_PAY_URL,
                    appId, rsaPrivateKey, ProjectConsts.aliFormat, ProjectConsts.aliCharset, rsaPublicKey, ProjectConsts.aliSignType); //获得初始化的AlipayClient
        }
        return alipayClient;
    }






  /**
     * 支付宝支付
     */


    public void aliPrepay(HttpServletResponse response) {
        try{
            String form = generateAliPay();
            if(!"err".equals(form)){
                response.setContentType("text/html;charset=utf-8");
                response.getWriter().write(form);// 直接将完整的表单html输出到页面
                response.getWriter().flush();
            }
        }catch (Exception e){
            System.out.println("支付失败");
        }
    }








    /**
     * 支付宝方面订单号获取
     */
    public String generateAliPay(){
        AlipayClient alipayClient = getAlipayClient();
        AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();


        // 封装请求支付信息
        AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
        model.setOutTradeNo("1");//本地订单号
        model.setSubject("黑人牙膏");//订单标题
        Integer totalAmount = 10;//订单总金额(单位元精确小数后两位)
        model.setTotalAmount(String.valueOf(totalAmount));
        model.setBody("好用");//产品描述
        model.setProductCode("QUICK_WAP_WAY");//销售产品码
        alipayRequest.setBizModel(model);
        // 设置异步通知地址
        alipayRequest.setNotifyUrl("https://tronsis.test.com/demo/com/ali/pay");
        // 设置同步地址
        alipayRequest.setReturnUrl("https://tronsis.test.com");


        String form = "";
        try {
//            logger.info("alipay_request = "+ TJson.objToStr(alipayRequest));
            // 调用SDK生成表单
            form = alipayClient.pageExecute(alipayRequest).getBody();//调用SDK生成表单
//            logger.info("form = "+form);
        } catch (Exception e) {
            System.out.println("支付出错");
        }
        return form;
    }


-------------------------------------------------------------------------------------------------回调


    /**
     * 支付宝方面异步回调
     * @param request
     * @return
     */
    public String AlipayCallBack(HttpServletRequest request){
        //获取支付宝POST过来反馈信息
        Map<String,String> params = new HashMap<String,String>();


        Map requestParams = request.getParameterMap();
        for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
            String name = (String) iter.next();
            String[] values = (String[]) requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i]
                        : valueStr + values[i] + ",";
            }
            //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
            //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
            params.put(name, valueStr);
        }
        logger.info("params = "+ TJson.objToStr(params));
        boolean verify_result =  rsaCheck(params);
        if(verify_result && dealWithAliPayChargeOrder(params)){
            return "success";
        }
        return "false";
    }




    /**
     * 订单验证
     * @param params
     * @return
     */
    @Transactional
    public boolean dealWithAliPayChargeOrder(Map<String, String> params) {
        String outTradeNo = params.get("out_trade_no");
        Order order = orderMapper.selectByOutTradeNo(outTradeNo);
        if (order == null) {
            logger.info("订单" + outTradeNo + "不存在");
            return false;
        }


        boolean locked = distributeLocker.lock(ProjectConsts.USER_ALIPAY_DEAL_LOCK_KEY);
        try {
            if (locked) {
                String totalAmount = params.get("total_amount");
                double totalPrice = Double.parseDouble(totalAmount) * 100;
                if(order.getTotalAmount() != Math.round(totalPrice)){
                    logger.info("alipay和订单金额不一致");
                    return false;
                }


                if(totalPrice < 0 || order.getTotalAmount() < 0){
                    logger.info("alipay或订单金额为负");
                    return false;
                }
                //set done
                order.setCreatOn(LocalDateTime.now());
                order.setUpdateOn(LocalDateTime.now());
                order.setStatus(ClientOrderStatus.PAYED);


                //后台订单状态初始化为 等待接待
                order.setServiceStatus(ServiceStatus.SERVICE_WAIT);
                libraOrderRepository.save(order);
            }
        } finally {
            if (locked) {
                //TODO  + order.getUserId()
                distributeLocker.unlock(ProjectConsts.USER_ALIPAY_DEAL_LOCK_KEY);
            }
        }
        return false;
    }






    /**
     * 验证RSA签名
     * @param params
     * @return
     */
    public boolean rsaCheck(Map<String, String> params) {
        try {
            boolean verify_result = AlipaySignature.rsaCheckV1(params, rsaPublicKey, "utf-8", "RSA2");
            logger.info("verify_result = " + verify_result);
            return verify_result;
        } catch (AlipayApiException e) {
            System.out.println("验证签名失败");
            throw CommonException.PAY_FAIL;
        }
    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 Android 支付宝支付代码示例: 1. 添加依赖 ``` implementation 'com.alipay.sdk:alipay-sdk-java:3.8.0' ``` 2. 调用支付宝支付 ```java public class AliPayUtil { /** * 支付宝支付业务 * * @param activity 启动支付的 Activity * @param orderInfo 支付宝订单信息 */ public static void pay(final Activity activity, final String orderInfo) { Runnable payRunnable = new Runnable() { @Override public void run() { PayTask alipay = new PayTask(activity); Map<String, String> result = alipay.payV2(orderInfo, true); Message msg = new Message(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage(msg); } }; Thread payThread = new Thread(payRunnable); payThread.start(); } private static final int SDK_PAY_FLAG = 1; private static final int SDK_AUTH_FLAG = 2; private static Handler mHandler = new Handler(Looper.getMainLooper()) { @SuppressWarnings("unchecked") public void handleMessage(Message msg) { switch (msg.what) { case SDK_PAY_FLAG: { PayResult payResult = new PayResult((Map<String, String>) msg.obj); String resultStatus = payResult.getResultStatus(); // 判断支付状态 if (TextUtils.equals(resultStatus, "9000")) { // 支付成功 } else if (TextUtils.equals(resultStatus, "6001")) { // 用户取消支付 } else { // 支付失败 } break; } default: break; } } }; } ``` 3. 调用示例 ```java String orderInfo = "xxx"; // 支付宝订单信息 AliPayUtil.pay(this, orderInfo); ``` 注意:在调用支付宝支付前,需要先获取订单信息,然后将订单信息传给支付宝 SDK 进行支付。具体的订单信息获取方式,可以参考支付宝支付官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值