支付宝APP支付集成+.net(沙箱调试)

1.服务端集成代码

		private  const string APPID = "发起请求的应用ID";
        private const string APP_PRIVATE_KEY = "私钥";
        private const string ALIPAY_PUBLIC_KEY = "公钥";
        private  const string CHARSET = "utf-8";
        static void Main(string[] args)
        {
        	//沙箱地址“https://openapi.alipaydev.com/gateway.do”,和上线的不同
            IAopClient client = new DefaultAopClient("https://openapi.alipaydev.com/gateway.do", APPID, APP_PRIVATE_KEY, "json", "1.0", "RSA2", ALIPAY_PUBLIC_KEY, CHARSET, false);
            //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay
            AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
            //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
            AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
            model.Body = "我是测试数据";
            model.Subject = "App支付测试DoNet";
            model.TotalAmount = "0.01";
            model.ProductCode = "QUICK_MSECURITY_PAY";
            model.OutTradeNo = "20170216test02";
            model.TimeoutExpress = "30m";
            request.SetBizModel(model);
            //这里和普通的接口调用不同,使用的是sdkExecute
            AlipayTradeAppPayResponse response = client.SdkExecute(request);
            string result=response.Body;
            //页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理。
        }

返回的最终结果"result"即为最终的订单信息,可以返回给客户端进行操作。代码中需要引入AopSdk.dll,服务端代码包:https://openhome.alipay.com/doc/sdkDownload.resource?sdkType=NET (bin中可找到dll)
调试过程中遇到问题:私钥打死配置错误,只能重新生成了
由于是调试,我最终使用的是C#控制台调试,取到最终结果result即可,然后复制订单信息(即result)在APP端代码中去设置订单信息,然后请求支付。

2.APP端集成代码

	private static final int SDK_PAY_FLAG = 1;
	private static final int SDK_AUTH_FLAG = 2;
	
	//orderInfo即为服务端取到的result(测试使用而已)
	//通过线程请求APP支付服务
	final String orderInfo = "app_id=2016092100565607&biz_content=%7b%22body%22%3a%22%e6%88%91%e6%98%af%e6%b5%8b%e8%af%95%e6%95%b0%e6%8d%ae%22%2c%22out_trade_no%22%3a%2220170216test02%22%2c%22product_code%22%3a%22QUICK_MSECURITY_PAY%22%2c%22subject%22%3a%22App%e6%94%af%e4%bb%98%e6%b5%8b%e8%af%95DoNet%22%2c%22timeout_express%22%3a%2230m%22%2c%22total_amount%22%3a%220.01%22%7d&charset=utf-8&format=json&method=alipay.trade.app.pay&sign_type=RSA2&timestamp=2018-09-29+17%3a40%3a28&version=1.0&sign=3tmlOGDyTtRFjxHORSktnUQDHwOE7LqnPsJrpd6ifMoqxRazM2PwjUAp3NomxZXzQOEz2Nmrt%2fcWmM8uQndQikSXU6sXmXEP9zCMYZxZDmwiU2d92N2SigcUExi8cNVfjGURzCo5sepRlSjiui0Ckqd3C7u6CFMf7lwnvosKQhYodsom6%2fl2AXgtSdKJSleg43QBbQSvNgF0SATGpsb36vOo6VhSPBgfhEO%2bdcbWg99FoynLZzGE2d3VNjPZG1sdcitH7M8if85JY2V9H7Y9XxzwIA6t9SY%2b1WHe0tuFsSTPlSEa08Q8jVtGtKHww6mF0%2fri28h%2b1tVrul5SZRhhmw%3d%3d";
		Runnable payRunnable = new Runnable() {

			@Override
			public void run() {
				PayTask alipay = new PayTask(PayDemoActivity.this);
				Map<String, String> result = alipay.payV2(orderInfo, true);
				Log.i("msp", result.toString());

				Message msg = new Message();
				msg.what = SDK_PAY_FLAG;
				msg.obj = result;
				mHandler.sendMessage(msg);
			}
		};

		Thread payThread = new Thread(payRunnable);
		payThread.start();

		//然后通过异步处理机制处理支付结果是否成功
		@SuppressLint("HandlerLeak")
	private Handler mHandler = new Handler() {
		@SuppressWarnings("unused")
		public void handleMessage(Message msg) {
			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();
				Toast.makeText(PayDemoActivity.this, resultStatus+"", Toast.LENGTH_SHORT).show();
				// 判断resultStatus 为9000则代表支付成功
				if (TextUtils.equals(resultStatus, "9000")) {
					// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
					Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
				} else {
					// 该笔订单真实的支付结果,需要依赖服务端的异步通知。
					Toast.makeText(PayDemoActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
				}
				break;
			}
			case SDK_AUTH_FLAG: {
				@SuppressWarnings("unchecked")
				AuthResult authResult = new AuthResult((Map<String, String>) msg.obj, true);
				String resultStatus = authResult.getResultStatus();

				// 判断resultStatus 为“9000”且result_code
				// 为“200”则代表授权成功,具体状态码代表含义可参考授权接口文档
				if (TextUtils.equals(resultStatus, "9000") && TextUtils.equals(authResult.getResultCode(), "200")) {
					// 获取alipay_open_id,调支付时作为参数extern_token 的value
					// 传入,则支付账户为该授权账户
					Toast.makeText(PayDemoActivity.this,
							"授权成功\n" + String.format("authCode:%s", authResult.getAuthCode()), Toast.LENGTH_SHORT)
							.show();
				} else {
					// 其他状态值则为授权失败
					Toast.makeText(PayDemoActivity.this,
							"授权失败" + String.format("authCode:%s", authResult.getAuthCode()), Toast.LENGTH_SHORT).show();

				}
				break;
			}
			default:
				break;
			}
		};
	};

app客户端代码较为简单,只需要请求服务器,通过服务器返回的订单信息进行操作即可调用支付。app支付demo地址:http://p.tb.cn/rmsportal_6680_WS_APP_PAY_SDK_BASE_2.0.zip

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java中集成支付宝App支付沙箱环境,您可以按照以下步骤进行具体实现: 1. 首先,确保您已经在支付宝开放平台注册并创建了应用,并获取到了应用的AppID、私钥等信息。同时,您还需要下载并导入支付宝SDK到您的Java项目中。 2. 创建一个Java类,并引入支付宝SDK相关的类和包。 3. 在该类中创建一个方法,用于生成支付宝App支付的订单信息字符串。您可以使用SDK提供的接口来生成订单信息。 ```java import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayConstants; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipayTradeAppPayRequest; import com.alipay.api.response.AlipayTradeAppPayResponse; public String generateAlipayOrderInfo() { // 创建AlipayClient对象,设置沙箱环境的网关、AppID、私钥等参数 DefaultAlipayClient alipayClient = new DefaultAlipayClient( "https://openapi.alipaydev.com/gateway.do", "<Your AppID>", "<Your Private Key>", AlipayConstants.FORMAT_JSON, AlipayConstants.CHARSET_UTF8, "<Your Alipay Public Key>", AlipayConstants.SIGN_TYPE_RSA2 ); // 创建AlipayTradeAppPayRequest对象,设置业务参数 AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); request.setBizContent("<Your Biz Content>"); try { // 调用SDK的SDKExecute方法,发送支付宝App支付请求 AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); // 获取订单信息字符串 String orderInfo = response.getBody(); return orderInfo; } catch (AlipayApiException e) { e.printStackTrace(); } return null; } ``` 4. 在`<Your AppID>`、`<Your Private Key>`、`<Your Alipay Public Key>`和`<Your Biz Content>`等位置替换为您的实际值。`<Your Biz Content>`是订单信息的JSON字符串,其中包含了订单的详细信息。 5. 调用`generateAlipayOrderInfo`方法,得到支付宝App支付的订单信息字符串。 请注意,以上代码仅提供了生成支付宝App支付订单信息字符串的示例,实际使用时还需要根据您的业务需求进行相应的参数配置和处理。另外,为了确保安全性,建议将敏感信息(如私钥)存储在安全的位置,并使用适当的加密方式进行保护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值