paypal支付对接(付款方式:及时付款、快速付款):PC端支付、APP端支付,异步回调IPN

最近几天公司项目接入paypal支付,跟同事一路磕磕绊绊,各种邮件联系技术客服,各种等邮件,最后终于对接完成。

中间遇到最大的坑,是APP端支付,IPN异步回调,一直不请求回调,该设置的回调地址都设置了好几遍,就在绝望时,昨晚抱着试试看的心态测试了一单,竟然回调了!!!沙盒环境调通了!!!可以安心切到生产环境了!!!

PC端支付代码很简单,APP端现成SDK,异步回调要主动请求paypal做个验签。

PC端发起支付代码,就一个表单,要稍微注意下表单提交地址和商户邮件,区分沙盒环境和生产环境!!

沙盒环境发起支付PC代码示例(生产环境:支付地址去掉sandbox,商户邮件改成正式即可):

  

异步回调接口,基于jfinal,PC端和APP端使用一套:

    /**
     * paypal支付异步回调
     */
    public void paypal() {
        System.out.println("paypal异步回调:");
        Map queryParas = new HashMap(16);
        queryParas.put("cmd", PaypalUtil.CMD_NOTIFY_VALIDATE);
        getParaMap().forEach((k, v) -> queryParas.put(k, v[0]));
        // 验签!! VERIFIED INVALID
        String ret = HttpKit.get(PaypalUtil.PAY_URL, queryParas);
        if (!"VERIFIED".equals(ret)) {
            System.out.println("验签失败!!!");
            renderText("fail");
            return;
        }
        String paymentStatus = getPara("payment_status");
        String onumber = getPara("item_name");
        String amount = getPara("mc_gross");
        System.out.println("验签成功!!!");
        System.out.println("paymentStatus:" + paymentStatus);
        if (!"Completed".equals(paymentStatus)) {
            System.out.println("payment_status异常:" + paymentStatus);
            renderText("fail");
            return;
        }
        //后续逻辑!!!自己写!!!  最后告诉paypal成功失败 renderText("success");

PaypalUtil.java

public class PaypalUtil {

    /**
     * sandbox/live
     */
    public static final String MODE = "sandbox";

    public static final String BUSINESS = "***[email protected]";

    public final static String CLENT_ID = "";

    /**
     * PC端,生产环境需删除sandbox
     */
    public final static String PAY_URL = "https://www.sandbox.paypal.com/cgi-bin/webscr";

    public final static String CURRENCY = "USD";

    public final static String CMD_XCLICK = "_xclick";

    public final static String CMD_NOTIFY_VALIDATE = "_notify-validate";

}

最后大家一块感受下,成功的喜悦!!UTF-8编码,需要进商户设置。

paypal支付对接(付款方式:及时付款、快速付款):PC端支付、APP端支付,异步回调IPN_第1张图片

还是很纳闷,APP端支付时,怎么会没有异步回调地址notify_url这个参数呢?只能设置到商户中吗?为啥PC端有呢?客服说有,原生同事说没有......

附上两封技术客服回复邮件截图:

paypal支付对接(付款方式:及时付款、快速付款):PC端支付、APP端支付,异步回调IPN_第2张图片

paypal支付对接(付款方式:及时付款、快速付款):PC端支付、APP端支付,异步回调IPN_第3张图片


paypal支付各种配置各种坑。

肯定还有很多未踩到的坑.......


你可能感兴趣的:(java)