Javaの+サーブレットリンケージパーティ決済アリペイ

コンピュータ側スキャンコードアリペイのお支払いの場合

序文

ビジネスニーズとして、このパーティの支払いが差し迫っている学びます

今Alipayの支払及びマイクロ文字を使用するまでは、そうすることを選んだので、

ピットの多くの中間ステップ、ここレコード

準備

  • 有料アカウントバオオープンプラットフォームのためにサインアップ
  • サンドボックスを入力した後、あなたの公開鍵を設定します
  • 登録プロセスは、それらを繰り返すことはしません

コーディング

package alipay.config;

import java.io.FileWriter;
import java.io.IOException;


public class AlipayConfig {
	
//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

	// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
	public static String app_id = "";
	
	// 商户私钥,您的PKCS8格式RSA2私钥
    public static String merchant_private_key = "";
	
	// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public static String alipay_public_key = "";

	// 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
	public static String notify_url = "";

	// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
	public static String return_url = "";

	// 签名方式
	public static String sign_type = "RSA2";
	
	// 字符编码格式
	public static String charset = "utf-8";
	
	// 支付宝网关
	public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
	
	// 支付宝网关
	public static String log_path = "C:\\";


//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

    /** 
     * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
     * @param sWord 要写入日志里的文本内容
     */
    public static void logResult(String sWord) {
        FileWriter writer = null;
        try {
            writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");
            writer.write(sWord);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


サーブレットを書きます

package alipay.servlet;

import alipay.config.AlipayConfig;
import alipay.entity.Order;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;


import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import java.io.IOException;

@WebServlet("/pay")
public class AliPay extends HttpServlet {

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        //获得初始化的AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
        //设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(AlipayConfig.return_url);
        alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
        Order order = new Order();
        alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
        //商户订单号,商户网站订单系统中唯一订单号,必填
        String out_trade_no = “订单号”;
        //付款金额,必填
        String total_amount = “多少钱”;
        //订单名称,必填
        String subject = “订单名称”;
        //商品描述,可空
        String body = “商品描述”;
        alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
                + "\"total_amount\":\""+ total_amount +"\","
                + "\"subject\":\""+ subject +"\","
                + "\"body\":\""+ body +"\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

        //请求
        String result = null;
        try {
            result = alipayClient.pageExecute(alipayRequest).getBody();
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        //输出
        res.setContentType("text/html;charset=UTF-8");
        res.getWriter().write(result);
    }
}

二つの重要な事柄

return_urlサーバーの同期通知ページパス

通常、サーブレットサーバー非同期通知のページパス、notify_url

しかし、同期のインターフェイスの新しいバージョンでは、この注文のステータス情報を返しません

非同期コールバック

マッピングは、ネットワーク内で行う必要があり、ネットワークマッピング内で行われなければならない非同期コールバックアドレスに注意を払う必要があり、それは、非同期テストサインです

この方法を行うために単独で出てリッピング
これを、実際に公式のデモに自分自身をコントロールする方法を確認するために、ほぼ同じですが、私はこの公式のコード、私たちの遊びに固執しません

ページはジャンプしない表示されます

res.setContentType("text/html;charset=UTF-8");

それは、正しくジャンプを解決できるように、

ページが表示されますフィッシング

解決策:置くすべての関連ページがアリペイから出てきました

ネットワーク侵入ツール

私は、公式ウェブサイトのアドレス添付し、cpolarを使用していますhttps://www.cpolar.com/docsを

私は非常に良い使用を感じます

リリース3元の記事 ウォンの賞賛0 ビュー91

おすすめ

転載: blog.csdn.net/weixin_43800829/article/details/105361879