Current section
Files
Jump to
Current section
Files
lib/mapi.ex
defmodule Alipay.Mapi.Policy do
defstruct pid: "", key: "", sign_type: "", private_key: ""
end
defmodule Alipay.Mapi do
@url "https://mapi.alipay.com/gateway.do"
def create_direct_pay_by_user_url(policy, %{
out_trade_no: _out_trade_no,
subject: _subject
} = params) do
params = %{
service: "create_direct_pay_by_user",
partner: policy.pid,
_input_charset: "utf-8",
payment_type: "1",
seller_id: policy.pid,
} |> Map.merge(params)
params = sign(policy, params)
URI.encode_query(params)
end
def sign(policy, params) do
joined_string = Enum.map(params, fn({k, v}) ->
"#{k}=#{v}"
end) |> Enum.join("&")
sign = case policy.sign_type do
"MD5" -> "#{joined_string}#{policy.key}" |> :erlang.md5 |> Base.encode16 |> String.downcase
"RSA" -> Alipay.Utils.private_key_sign(joined_string, :sha1, policy.private_key)
end
params
|> Map.put(:sign_type, policy.sign_type)
|> Map.put(:sign, sign)
end
end