android集成支付宝支付功能

来源:互联网 发布:mac os 10.10下载 编辑:程序博客网 时间:2024/05/01 22:02

</pre>首先申请支付宝商家账户…接着点击我的商家服务…下载下面的快捷支付压缩包……<p></p><p><img src="http://img.blog.csdn.net/20150409135734393?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWZ5a2lzc3NreQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="770" height="840" alt="" /></p><p>解压压缩包…打开openssl文件夹…首先生成支付宝支付所必须的公秘和私钥……</p><p><img src="http://img.blog.csdn.net/20150409164314322?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWZ5a2lzc3NreQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="620" height="300" alt="" /></p><p>私钥和公钥的生成文件openssl.exe必须在DOS下运行(最好直接打开opnssl.exe而不是使用DOS进入,笔者使用DOS进入的时候会莫名其妙的出现生成不了文件的情况)……</p><p>输入生成RSA私钥 命令……</p><p></p><pre name="code" class="plain">genrsa -out rsa_private_key.pem 1024

可以在\openssl\bin文件夹下面看到生成的RSA私钥文件

接着输入生成RSA公钥的命令

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

之后在\openssl\bin文件夹下生成了RSA公钥文件

最后将RSA私钥更改为PKCS8格式…输入命令…

openssl>pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt


将如图所示的字符拷贝出来…去除begin和end这两行…剩下的去除空格…作为客户端的私钥保存好…

登录支付宝商户账号…点开如图界面…



打开添加RSA秘钥…将刚刚所生成的RSA公钥填入并保存…


新建android工程…在libs文件夹下导入alipaysdk.jar…


在AndroidManifest.xml文件中加入如下代码……

        <!-- alipay sdk begin -->        <activity            android:name="com.alipay.sdk.app.H5PayActivity"            android:configChanges="orientation|keyboardHidden|navigation"            android:exported="false"            android:screenOrientation="behind"            android:windowSoftInputMode="adjustResize|stateHidden" >        </activity>        <activity            android:name="com.alipay.sdk.auth.AuthActivity"            android:configChanges="orientation|keyboardHidden|navigation"            android:exported="false"            android:screenOrientation="behind" >        </activity>        <!-- alipay sdk end -->


新建AliPayActivity.java……

package com.deppon.ecappactivites.pay;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;import java.util.Random;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.text.TextUtils;import android.util.Log;import android.widget.Toast;import com.alipay.sdk.app.PayTask;import com.deppon.ecappdatamodel.Result;import com.deppon.ecapphelper.AppHelper;public class AliPayActivity extends Activity {<span style="white-space:pre"></span>public static final String PARTNER = "";//支付宝商家的ID<span style="white-space:pre"></span>public static final String SELLER = "";//支付宝商家账户<span style="white-space:pre"></span>public static final String RSA_PRIVATE = "";//生成的RSA私钥<span style="white-space:pre"></span>public static final String RSA_PUBLIC = "";//生成的RSA公钥<span style="white-space:pre"></span>public static final String NOTIFY_URL = "";//支付结果通知URL,用于通知服务器支付结果进行处理        //以上参数建议使用接口从服务器上取得,便于更改和防止被反编译<span style="white-space:pre"></span>private Handler mHandler = new Handler() {<span style="white-space:pre"></span>public void handleMessage(Message msg) {<span style="white-space:pre"></span>switch (msg.what) {<span style="white-space:pre"></span>case 10: {<span style="white-space:pre"></span>Result result = new Result((String) msg.obj);<span style="white-space:pre"></span>//String resultInfo = result.getResult();<span style="white-space:pre"></span>String resultStatus = result.getResultStatus();<span style="white-space:pre"></span>if (TextUtils.equals(resultStatus, "9000")) {<span style="white-space:pre"></span>//支付成功<span style="white-space:pre"></span>} else {<span style="white-space:pre"></span>// 判断resultStatus 为非“9000”则代表可能支付失败<span style="white-space:pre"></span>// “8000”代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小                                          概率状态)<span style="white-space:pre"></span>if (TextUtils.equals(resultStatus, "8000")) {<span style="white-space:pre"></span>//支付结果确认中<span style="white-space:pre"></span>} else {<span style="white-space:pre"></span>// 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误<span style="white-space:pre"></span>//支付失败<span style="white-space:pre"></span>}<span style="white-space:pre"></span>}<span style="white-space:pre"></span>finish(); <span style="white-space:pre"></span>break;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>default:<span style="white-space:pre"></span>break;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>};<span style="white-space:pre"></span>};<span style="white-space:pre"></span>@Override<span style="white-space:pre"></span>protected void onCreate(Bundle savedInstanceState) {<span style="white-space:pre"></span>super.onCreate(savedInstanceState);                //进行支付<span style="white-space:pre"></span>pay();<span style="white-space:pre"></span>}<span style="white-space:pre"></span>/**<span style="white-space:pre"></span> * call alipay sdk pay. 调用SDK支付<span style="white-space:pre"></span> * <span style="white-space:pre"></span> */<span style="white-space:pre"></span>public void pay() {<span style="white-space:pre"></span>String info = getOrderInfo("<span style="font-family: Arial, Helvetica, sans-serif;">给支付宝平台的订单号,唯一编码</span><span style="font-family: Arial, Helvetica, sans-serif;">", "商品名称", ""金额);</span><span style="white-space:pre"></span>String sign = sign(info);<span style="white-space:pre"></span>try {<span style="white-space:pre"></span>sign = URLEncoder.encode(sign, "UTF-8");<span style="white-space:pre"></span>} catch (UnsupportedEncodingException e) {<span style="white-space:pre"></span>e.printStackTrace();<span style="white-space:pre"></span>}<span style="white-space:pre"></span>info = info + "&sign=" + "\"" + sign + "\"" + "&" + getSignType();<span style="white-space:pre"></span>final String orderInfo = info;<span style="white-space:pre"></span>Runnable payRunnable = new Runnable() {<span style="white-space:pre"></span>@Override<span style="white-space:pre"></span>public void run() {<span style="white-space:pre"></span>PayTask alipay = new PayTask(AliPayActivity.this);<span style="white-space:pre"></span>String result = alipay.pay(orderInfo);<span style="white-space:pre"></span>Message msg = new Message();<span style="white-space:pre"></span>msg.what = 10;<span style="white-space:pre"></span>msg.obj = result;<span style="white-space:pre"></span>mHandler.sendMessage(msg);<span style="white-space:pre"></span>}<span style="white-space:pre"></span>};<span style="white-space:pre"></span>Thread payThread = new Thread(payRunnable);<span style="white-space:pre"></span>payThread.start();<span style="white-space:pre"></span>}<span style="white-space:pre"></span>//<span style="white-space:pre"></span>/**<span style="white-space:pre"></span>//<span style="white-space:pre"></span> * check whether the device has authentication alipay account.<span style="white-space:pre"></span>//<span style="white-space:pre"></span> * 查询终端设备是否存在支付宝认证账户<span style="white-space:pre"></span>//<span style="white-space:pre"></span> * <span style="white-space:pre"></span>//<span style="white-space:pre"></span> */<span style="white-space:pre"></span>//<span style="white-space:pre"></span>public void check(View v) {<span style="white-space:pre"></span>//<span style="white-space:pre"></span>Runnable checkRunnable = new Runnable() {<span style="white-space:pre"></span>//<span style="white-space:pre"></span>//<span style="white-space:pre"></span>@Override<span style="white-space:pre"></span>//<span style="white-space:pre"></span>public void run() {<span style="white-space:pre"></span>//<span style="white-space:pre"></span>PayTask payTask = new PayTask(DemoActivity.this);<span style="white-space:pre"></span>//<span style="white-space:pre"></span>boolean isExist = payTask.checkAccountIfExist();<span style="white-space:pre"></span>//<span style="white-space:pre"></span>//<span style="white-space:pre"></span>Message msg = new Message();<span style="white-space:pre"></span>//<span style="white-space:pre"></span>msg.what = SDK_CHECK_FLAG;<span style="white-space:pre"></span>//<span style="white-space:pre"></span>msg.obj = isExist;<span style="white-space:pre"></span>//<span style="white-space:pre"></span>mHandler.sendMessage(msg);<span style="white-space:pre"></span>//<span style="white-space:pre"></span>}<span style="white-space:pre"></span>//<span style="white-space:pre"></span>};<span style="white-space:pre"></span>//<span style="white-space:pre"></span>//<span style="white-space:pre"></span>Thread checkThread = new Thread(checkRunnable);<span style="white-space:pre"></span>//<span style="white-space:pre"></span>checkThread.start();<span style="white-space:pre"></span>//<span style="white-space:pre"></span>//<span style="white-space:pre"></span>}<span style="white-space:pre"></span>//<span style="white-space:pre"></span>/**<span style="white-space:pre"></span>//<span style="white-space:pre"></span> * get the sdk version. 获取SDK版本号<span style="white-space:pre"></span>//<span style="white-space:pre"></span> * <span style="white-space:pre"></span>//<span style="white-space:pre"></span> */<span style="white-space:pre"></span>//<span style="white-space:pre"></span>public void getSDKVersion() {<span style="white-space:pre"></span>//<span style="white-space:pre"></span>PayTask payTask = new PayTask(this);<span style="white-space:pre"></span>//<span style="white-space:pre"></span>String version = payTask.getVersion();<span style="white-space:pre"></span>//<span style="white-space:pre"></span>Toast.makeText(this, version, Toast.LENGTH_LONG).show();<span style="white-space:pre"></span>//<span style="white-space:pre"></span>}<span style="white-space:pre"></span>public String getOrderInfo(String subject, String body, String price) {<span style="white-space:pre"></span>// 合作者身份ID<span style="white-space:pre"></span>String orderInfo = "partner=" + "\"" + PARTNER + "\"";<span style="white-space:pre"></span>// 卖家支付宝账号<span style="white-space:pre"></span>orderInfo += "&seller_id=" + "\"" + SELLER + "\"";<span style="white-space:pre"></span>// 商户网站唯一订单号<span style="white-space:pre"></span>orderInfo += "&out_trade_no=" + "\"" +"<span style="font-family: Arial, Helvetica, sans-serif;">唯一订单号</span>" + "\"";<span style="white-space:pre"></span>// 商品名称<span style="white-space:pre"></span>orderInfo += "&subject=" + "\"" + subject + "\"";<span style="white-space:pre"></span>// 商品详情<span style="white-space:pre"></span>orderInfo += "&body=" + "\"" + body + "\"";<span style="white-space:pre"></span>// 商品金额<span style="white-space:pre"></span>orderInfo += "&total_fee=" + "\"" + price + "\"";<span style="white-space:pre"></span>// 服务器异步通知页面路径<span style="white-space:pre"></span>orderInfo += "&notify_url=" + "\"" + NOTIFY_URL+ "\"";<span style="white-space:pre"></span>// 接口名称, 固定值<span style="white-space:pre"></span>orderInfo += "&service=\"mobile.securitypay.pay\"";<span style="white-space:pre"></span>// 支付类型, 固定值<span style="white-space:pre"></span>orderInfo += "&payment_type=\"1\"";<span style="white-space:pre"></span>// 参数编码, 固定值<span style="white-space:pre"></span>orderInfo += "&_input_charset=\"utf-8\"";<span style="white-space:pre"></span>// 设置未付款交易的超时时间<span style="white-space:pre"></span>// 默认30分钟,一旦超时,该笔交易就会自动被关闭。<span style="white-space:pre"></span>// 取值范围:1m~15d。<span style="white-space:pre"></span>// m-分钟,h-小时,d-天,1c-当天(无论交易何时创建,都在0点关闭)。<span style="white-space:pre"></span>// 该参数数值不接受小数点,如1.5h,可转换为90m。<span style="white-space:pre"></span>// 该功能需要联系支付宝配置关闭时间。<span style="white-space:pre"></span>orderInfo += "&it_b_pay=\"30m\"";<span style="white-space:pre"></span>// 由商户客户端自行配置,可不传<span style="white-space:pre"></span>orderInfo += "&return_url=\"m.alipay.com\"";<span style="white-space:pre"></span>// 调用银行卡支付,需配置此参数,参与签名, 固定值<span style="white-space:pre"></span>// orderInfo += "&paymethod=\"expressGateway\"";<span style="white-space:pre"></span>return orderInfo;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>public String getOutTradeNo() {<span style="white-space:pre"></span>SimpleDateFormat format = new SimpleDateFormat("MMddHHmmss",Locale.getDefault());<span style="white-space:pre"></span>Date date = new Date();<span style="white-space:pre"></span>String key = format.format(date);<span style="white-space:pre"></span>Random r = new Random();<span style="white-space:pre"></span>key = key + r.nextInt();<span style="white-space:pre"></span>key = key.substring(0, 15);<span style="white-space:pre"></span>return key;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>public String sign(String content) {<span style="white-space:pre"></span>return AppHelper.sign(content, RSA_PRIVATE);<span style="white-space:pre"></span>}<span style="white-space:pre"></span>public String getSignType() {<span style="white-space:pre"></span>return "sign_type=\"RSA\"";<span style="white-space:pre"></span>}}

0 0
原创粉丝点击