• Android-支付宝快捷支付


    支付宝的快捷支付Android版业务流程比較麻烦,出现的意外情况比較多.在此,简单说下开发流程以及出现错误的解决方式;

    1.注冊支付业务.这里不在赘述.建立数据安全传输所须要的私钥公钥,这里採用的是RSA算法:

    打开开发包找到例如以下路径,点击openssl.exe打开dos操作界面:



    输入: 

    genrsa -out  rsa_private_key.pem 1024 

    rsa  -in rsa_private_key.pem -pubout  -out  rsa_public_key.pem

    将生成在该文件夹下生成rsa_private_key.pemrsa_public_key.pem两个文件.

    打开支付宝的界面登陆 然后在应用模块里面把rsa_public_key.pem中的数据输入到公钥模块里,

    (关于公钥密钥的知识參考前面发表的点击打开链接);

    如该文件用文本文档打开为

    -----BEGIN PUBLIC KEY-----
    xxxxxxxxxxxxxxxxxx

    xxxxxxxxxxxxxxxxxx
    -----END PUBLIC KEY-----

    则我们要获取的仅仅是-----BEGIN PUBLIC KEY-----与-----END PUBLIC KEY-----中间的内容,并把他们作为一个字符串提交到站点例如以下位置的地方上去:


    2.新建一个项目,设置android环境:

    1)AndroidManifest.xml配置例如以下:

    <uses-permission android:name="android.permission.INTERNET" />
    	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    	<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <activity
    	android:name="com.alipay.android.app.sdk.WapPayActivity"
    	android:screenOrientation="portrait">
    </activity>
    2)配置lib包:

    >将alipay.jar放到lib文件夹下(照道理他会自己主动生成lib文件,为了保险,选择右键BuildPath>..导入);

    >将alipay_msp.apk放到asseets文件夹下,该包的作用是在没移动支付应用的情况下自己主动提供安装应用,假设不包括本包 将自己主动打开相应的版支付界面

    >导入alipay_libproject作为我们project的资源project,该project必须跟我们的project在同一层级文件夹下,并作为android项目导入


    点击我们的应用,右键properties属性,选择例如以下图:点击add将lib项目导进去;


    此时还有问题,由于android项目的原因,所以我们要把导入的资源所有顶置,不然系统有可能报资源找不到的原因;


    3)代码配置;创建key配置

    public final class Keys {
    
    	//合作身份者id,以2088开头的16位纯数字
    	public static final String DEFAULT_PARTNER = "APPID";
    
    	//收款支付宝账号
    	public static final String DEFAULT_SELLER = "ssssss@163.com";
    
    	//商户私钥,自助生成
    	public static final String PRIVATE = "";
    
    	public static final String PUBLIC = "";
    }
    从Demo中提取Base64.java Result.java Rsa.java到你的项目中

    查找全部KeyFactory keyf = KeyFactory.getInstance("RSA");代码改动为

    KeyFactory keyf = KeyFactory.getInstance("RSA","BC");

    调用代码如參考例如以下:

    public class MainActivity extends Activity {
    	
    	Handler mHandler=new Handler(){
    		
    		public void handleMessage(Message msg) {
    			switch (msg.what) {
    			case 0x123:
    				System.out.println(msg.obj);
    					Toast.makeText(MainActivity.this,msg.obj+"",
    							Toast.LENGTH_SHORT).show();
    				break;
    
    			default:
    				break;
    			}
    			
    			
    		};
    		
    	};
    
    	@SuppressWarnings("deprecation")
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		String info = getNewOrderInfo();
    		String sign = Rsa.sign(info, Keys.PRIVATE);
    		sign = URLEncoder.encode(sign);
    		info += "&sign="" + sign + ""&" + getSignType();
    		final String orderInfo = info;
    		new Thread() {
    			public void run() {
    				AliPay alipay = new AliPay(MainActivity.this, mHandler);
    				String result = alipay.pay(orderInfo);
    				Message msg = new Message();
    				msg.what = 0x123;
    				msg.obj = result;
    				mHandler.sendMessage(msg);
    			}
    		}.start();
    		
    		
    	}
    	
    	private String getNewOrderInfo() {
    		StringBuilder sb = new StringBuilder();
    		sb.append("partner="");
    		sb.append(Keys.DEFAULT_PARTNER);
    		sb.append(""&out_trade_no="");
    		sb.append("12312313124451");
    		sb.append(""&subject="");
    		sb.append("商品名..");
    		sb.append(""&body="");
    		sb.append("商品描写叙述..");
    		sb.append(""&total_fee="");
    		sb.append("0.01");
    		sb.append(""¬ify_url="");
    
    		// 网址须要做URL编码
    		sb.append(URLEncoder.encode("http://notify.java.jpxx.org/index.jsp"));
    		sb.append(""&service="mobile.securitypay.pay");
    		sb.append(""&_input_charset="UTF-8");
    		sb.append(""&return_url="");
    		sb.append(URLEncoder.encode("http://m.alipay.com"));
    		sb.append(""&payment_type="1");
    		sb.append(""&seller_id="");
    		sb.append(Keys.DEFAULT_SELLER);
    
    		// 假设show_url值为空,可不传
    		// sb.append(""&show_url="");
    		sb.append(""&it_b_pay="1m");
    		sb.append(""");
    
    		return new String(sb);
    	}
    	
    	private String getSignType() {
    		return "sign_type="RSA"";
    	}
    	
    }
    发送的商品參数与返回的商品參数依据自己的业务改动;


    Tip:9000错误--报系统错误的 自己检查你的公钥 密钥在站点项目配置对不,大写和小写要注意;下面有出现过的错误及解决方式请补充.



  • 相关阅读:
    ReentrantLock类详解
    Linux中 docker安装
    canvas画图练习教程
    Axure 9 使用笔记
    设计模式9—工厂模式【创建型】
    Docker 快速部署 MySQL
    Laravel Sanctum SPA cookie&session 验证实践
    地图地区生成随机点
    Laravel Class 'DoctrineDBALDriverPDOMySqlDriver' not found
    LightHouse 自定义参数指令 (Argument Directives)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4199216.html
Copyright © 2020-2023  润新知